質問

これは、 ItemsControl.ItemTemplateプロパティのMSDNライブラリ記事

<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>  

この例は<StackPanel>要素の使用法の説明を探しています。
-<!> gt;
このパネルはListBoxのどこに存在しますか?
ItemTemplateでの目的は何ですか?
System.Windows.Controls.Panelを代わりに使用できますか、具体的にはグリッドですか?
ListBoxの各アイテムのテンプレートとして<Grid>要素を使用するにはどうすればよいですか?

ここに私が目指している概念があります:

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

<Path>要素を使用してグラフを描画しましたが、問題はありません。

私は軸のラベルに取り組んでおり、ItemTemplateで<=>要素の使用を実験していますが、このコンテキストでグリッドがどのように機能するかはわかりません。サンプルコードのパネルについて。

現在、Y軸ラベルのXAMLは次のようになっています。

<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>  

これは正しいように見えますか?実行時には何も表示されませんが、データバインディングとコードビハインドのデバッグを開始する前に、XAMLが正しくモデル化されていることを確認したいです。

役に立ちましたか?

解決

<!> quot;このパネルはListBoxのどこに存在しますか?<!> quot; -リストボックスは、リストアイテムごとに1つのコピーを作成します。つまり、myTodoListコレクションの各要素に1つずつ作成します。したがって、各リストアイテム内では、3つのラベルが上下に積み重ねられます。

<!> quot; ItemTemplateでの目的は何ですか?<!> quot; -ItemsSourceの各要素に対して複数のコントロールを表示できるようにするため。 ItemTemplateは、WPFの多くのものと同様に、子要素を1つしか取得できません。したがって、複数の子が必要な場合は、それらのレイアウト方法を指定する必要があります。パネル(この場合はStackPanel) p>

<!> quot; System.Windows.Controls.Panelをその代わりに使用できますか、具体的にはGrid?<!> quot; -賭けます。

<!> quot; ListBoxの各アイテムのテンプレートとして<Grid>要素を使用するにはどうすればよいですか?<!> quot; -他の場所でグリッドを使用するのと同じ方法。違いはありません。 ItemsControl(およびその子孫であるListBox)がグリッドの複数のインスタンスを作成するだけです。ただし、ItemTemplate内では、DataContextが現在のリストアイテムになるため、{Binding}はそのリストアイテムに関連することになります(ElementNameで指定しない限り)。

<!> quot;これは正しいですか?<!> quot; -これは、MSDNサンプルに関する質問とは無関係であり、何をしようとしているのかさえわかりません。しかし、私は答えようとします:あなたは名前<!> quot; GraphLabelYData <!> quot;を使用しているので、何かが間違っていると疑います。 2つの異なる方法。 ColumnDefinitionでは、私が知る限り、GraphLabelYDataをXAML要素の名前として扱います(つまり、Name="GraphLabelYData"またはx:Name="GraphLabelYData"を使用してwindow / page / UserControlで別のコントロールを探し、読み取りますそのコントロールのGraphLabelMarkerLengthプロパティ);ただし、TextBlockでは、GraphLabelYDataを現在のコレクションアイテムのプロパティの名前として扱います。そのうちの1つが正しくないと思われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top