Frage

Dies ist ein XAML-Codebeispiel aus dem MSDN Library Artikel für die ItemsControl.ItemTemplate Eigenschaft:

<ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=TaskName}" />
<TextBlock Text="{Binding Path=Description}"/>
<TextBlock Text="{Binding Path=Priority}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>  

Ich bin für eine Erklärung der Verwendung des <StackPanel> Element suchen, ist dieses Beispiel.
->
Wo befindet sich diese Platte in der List-Box existieren gehen?
Was ist ihr Zweck in der ItemTemplate?
Kann jeder System.Windows.Controls.Panel an seiner Stelle verwendet werden, und zwar ein Grid?
Wie würde ich mich über in der List-Box eines <Grid> Element als Vorlage für jedes Element verwenden?

Hier ist das Konzept, das ich für gehe:

http://img151.imageshack.us/img151/7960/graphconcept.png

Ich habe die Grafik mit einem <Path> Elemente gezogen, und es gibt es keine Probleme.

Ich arbeite auf den Etiketten für die axies, und ich mit der Verwendung eines <Grid> Elements in der ItemTemplate bin experimentiert - aber ich habe keine Ahnung, wie das Raster soll in diesem Zusammenhang funktionieren, und MSDN sagt nichts über die Panel in ihrem Beispielcode.

Meine XAML für die Y-Achsenbeschriftungen sieht derzeit wie folgt aus:

<ListBox Background="Transparent" BorderThickness="0" ItemsSource="{Binding Path=GraphLabelYData}">
<ListBox.ItemTemplate>  
<DataTemplate>  
<Grid>  
<Grid.RowDefinitions>  
<RowDefinition Height="{Binding Path=GraphLabelSpacing}" />  
</Grid.RowDefinitions>  
<Grid.ColumnDefinitions>  
<ColumnDefinition Width="Auto" />  
<ColumnDefinition Width="{Binding ElementName=GraphLabelYData, Path=GraphLabelMarkerLength}" />  
</Grid.ColumnDefinitions>  
<TextBlock HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding Path=GraphLabelTag}" />  
<Rectangle Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Stroke="Black" Fill="Black" />  
</Grid>  
</DataTemplate>  
</ListBox.ItemTemplate>  
</ListBox>  

Sieht das richtig? Nichts zeigt zur Laufzeit, aber ich möchte sicherstellen, dass die XAML modelliert richtig, bevor ich die Daten-Bindungen starten Debugging und der Code-behind.

War es hilfreich?

Lösung

„Wo ist dieses Panel geht in der List-Box existieren?“ - Die Listbox wird eine Kopie davon für jedes Listenelement machen, das heißt eine für jedes Element in der myTodoList Sammlung. Also in jedem Listeneintrag, haben Sie die drei Etiketten übereinander gestapelt werden.

"Was ist ihr Zweck in der ItemTemplate?" - Um es möglich zu zeigen, mehr als eine Steuerung für jedes Element in der Itemssource. ItemTemplate, wie viele Dinge in WPF kann nur ein untergeordnetes Element nehmen, also, wenn Sie mehrere Kinder wollen, müssen Sie angeben, wie Sie wollen, dass sie angelegt, und Sie tun das, indem eine Platte (Stackpanel in diesem Fall) hinzugefügt wird.

„Kann jeder System.Windows.Controls.Panel an seiner Stelle verwendet werden, und zwar ein Grid?“ - Sie setzen

.

„Wie würde ich mich über ein <Grid> Element als Vorlage für jedes Element in der List-Box verwenden?“ - auf die gleiche Weise ein Gitter anderswo verwenden würde. Es ist nicht anders; es ist nur, dass Items (und seine Nachkommen, ListBox) mehrere Instanzen Ihres Grid schaffen. Beachten Sie jedoch, dass in der ItemTemplate, Ihre Datacontext werden das aktuelle Listenelement sein, und daher werden Ihre {Binding}s zu dieser Liste Elemente relativ sein (es sei denn Sie geben sonst mit beispielsweise Elementnamen).

„Ist das richtig aus?“ - Das sollte wirklich als eine separate Frage gestellt werden, da sie auf die Fragen über die MSDN Probe nicht verwandt ist, und ich bin nicht einmal sicher, was Sie zu tun versuchen. Aber ich werde versuchen zu beantworten: Ich vermute, dass etwas nicht in Ordnung ist, weil Sie den Namen „GraphLabelYData“ zwei verschiedene Arten verwenden. In der Column, soweit ich das beurteilen kann, sind Sie GraphLabelYData als Name eines XAML-Element der Behandlung (dh Sie suchen ein anderes Steuerelement im Fenster / Seite / Usercontrol mit Name="GraphLabelYData" oder x:Name="GraphLabelYData" und zu lesen, die GraphLabelMarkerLength Eigenschaft Kontrolle ); aber im Textblock, sind Sie GraphLabelYData als Name einer Eigenschaft auf dem aktuellen Kollektion Artikel behandeln. Ich vermute, dass einer von denen ist nicht richtig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top