データバインディングを使用してキャンバスに表示する項目のリストがあります。Bindingを使用してキャンバスに項目を表示する方法
ItemsToShowInCanvas = new ObservableCollection<ItemDetail>
{
new ItemDetail {Text = "ABC", Top = 10, Left = 200},
new ItemDetail {Text = "DEF", Top = 100, Left = 300},
new ItemDetail {Text = "PQR", Top = 50, Left = 150}
};
ItemDetailは、テキストの自動プロパティを持つ単純なクラスで、トップと左は私が項目をデータバインドするとき、彼らはキャンバスに表示されない
public class ItemDetail
{
public string Text { get; set; }
public double Top { get; set; }
public double Left { get; set; }
}
値。しかし、項目は、TopプロパティとLeftプロパティを使用して記述された位置に表示されません。
<Canvas>
<ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Text}" Canvas.Top="{Binding Path=Top}" Canvas.Left="{Binding Path=Left}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
のItemsControlで
TextBlock
をバインドするには、デフォルトのitemspanelとしてのStackPanelを使用しています設定してください。あなたが追加しているテキストブロックは、実際にはスタックパネルに追加されますが、キャンバスには追加されません。 ItemsControlがキャンバスに追加されています。アイテムパネルをキャンバスに変更してみてください。 – Bathineniお返事ありがとうございます。私はItemsPanelをCanvasとして配置しようとしましたが、それは仕事をしませんでした。項目が重なり合って表示され始めました。 ItemContainerStyleの追加が機能しました。 –
[WPF:CanvasのChildrenプロパティをXAMLにバインドすることはできますか?](http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children -property-in-xaml) –