2016-06-11 17 views
0

Ich arbeite schon seit einem Jahr mit Delphi und jetzt entwickle ich C# UWP.
Ich habe bereits einige Arbeit getan, und ich kann in meiner XAML gibt es wie 1000 lines..BECAUSE muss ich 10 ‚Panels‘ tun genau identisch, nur ändern ihre Namen, beispielsweise sehen, dass:
Was kann ich tun, um Code in XAML nicht zu wiederholen?

<StackPanel Name="Stack1"> 
    <TextBlock Name="Text1"/> 
    <TextBox Name="Box1" 
</StackPanel> 
<StackPanel Name="Stack2"> 
    <TextBlock Name="Text2"/> 
    <TextBox Name="Box2" 
</StackPanel> 

Dies ist nur ein Beispiel, tatsächlich hat mein Code jeweils 100 Zeilen 'StackPanel'.

so .. Theres eine Art und Weise nur 1 ‚Stackpanel‘ zu tun und es als eine Klasse oder etwas auf XAML-Code 10 Mal mit wenigen Zeilen
zu verwenden, oder ich werde es 10-mal schreiben muß und verwenden 1000 Zeilen

+0

SO will keine n-in-1-Fragen, wobei n> 1. Und Ihre erste Frage ist wirklich von sehr begrenzter Nützlichkeit. Sie wählen die Steuerelemente nicht basierend auf ihrer üblichen Verwendung aus. Sie haben Anforderungen und wählen die beste Übereinstimmung aus. Die zweite Frage ist angesichts der bereitgestellten Informationen nicht zu beantworten. – IInspectable

+0

@Intspectable Hallo, da der erste eine "richtig/falsch" -Frage ist, dachte ich, es sei sinnlos, eine andere Frage zu stellen, sorry – GuiPetenuci

+0

Die erste Frage ist sinnlos zu fragen, egal ob es sich um eine andere Frage oder einen Stand handelt - einzige Frage. Es macht keinen Sinn zu fragen, wie beliebt eine bestimmte Kontrolle ist. Wählen Sie diejenige aus, die Ihren Anforderungen entspricht. Wenn Sie Ihre Anforderungen nicht kennen, sollten Sie zurück zum Zeichenbrett gehen. – IInspectable

Antwort

1

Sie können immer eine gute alte Benutzerkontrolle verwenden. Hier habe ich vorausgesetzt, Sie mit einem Beispiel:

<UserControl 
    x:Class="App1.ReusableCode" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:App1" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 

    <Grid VerticalAlignment="Center" HorizontalAlignment="Center"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <StackPanel Grid.Row="0"> 
      <TextBlock Text="SomeText" /> 
      <TextBlock Text="Some Text 2" /> 
     </StackPanel> 
     <StackPanel Name="stackPanel2" Grid.Row="1"> 
      <TextBlock Text="SomeText 3" /> 
      <TextBlock Text="Some Text 4" /> 
     </StackPanel> 
     <StackPanel Name="stackPanel3" Grid.Row="2"> 
      <TextBlock Text="SomeText 5" /> 
      <TextBlock Text="Some Text 6" /> 
     </StackPanel> 
     <StackPanel Name="stackPanel4" Grid.Row="3"> 
      <TextBlock Text="SomeText 7" /> 
      <TextBlock Text="Some Text 8" /> 
     </StackPanel> 
    </Grid> 
</UserControl> 

Sie können es in Ihre Ansichten wie folgt aus:

<Page 
    x:Class="App1.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="using:App1" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <local:ReusableCode x:Name="ucReusableCode" /> 
    </Grid> 
</Page> 

Wenn Ihr Usercontrol in einem Ordner befinden, Sie haben es so zu exportieren.

xmlns:usercontrol="using:App1.UserControlsFolder" 

die in Ihrer Seite XAML ist und es so nennen kann:

<Page 
    x:Class="App1.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="using:App1" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:usercontrol="using:App1.UserControlsFolder" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <usercontrol:ReusableCode x:Name="ucReusableCode" /> 
    </Grid> 
</Page> 

Hoffnung dies Ihre Frage beantwortet.

+0

Danke, Entschuldigung für die spätere Antwort, aber das wird auch funktionieren, Jetzt benutze ich C# jeden Tag in der Arbeit (ich war mit Delphi) und zu Hause, ich weiß jetzt eine Menge Dinge, danke – GuiPetenuci

2

Ich denke, was Sie brauchen, ist ein ItemsControl, oder die Steuerelemente von ItemsControl wie ListView abgeleitet. Zum Beispiel hier:

<ItemsControl ItemsSource="{x:Bind itemscontrolCollection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding MyText}" /> 
       <TextBox /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

-Code hinter:

private ObservableCollection<ItemsControlList> itemscontrolCollection; 

public MainPage() 
{ 
    this.InitializeComponent(); 
    itemscontrolCollection = new ObservableCollection<ItemsControlList>(); 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    itemscontrolCollection.Clear(); 
    for (int i = 1; i <= 100; i++) 
    { 
     itemscontrolCollection.Add(new ItemsControlList { MyText = "Text" + i }); 
    } 
} 

Meine ItemsControlList Klasse:

public class ItemsControlList 
{ 
    public string MyText { get; set; } 
} 

Ich weiß nicht, warum du Namen zu jedem StackPanel, TextBlock und TextBox hier eingestellt, Sie können data binding verwenden, um den Abhängigkeitseigenschaften für jedes Steuerelement einen Wert zuzuweisen.

Sie können überprüfen, die offizielle ListView and GridView sample zu überprüfen, wie ListView in UWP App zu verwenden. Und Sie können sich auch auf UI basics (XAML) sample beziehen, um herauszufinden, welches Steuerelement für Ihr Szenario besser geeignet ist.