ItemsControlにDataTemplateの中でキャンバスのプロパティを設定します
-
13-09-2019 - |
質問
私はこのItemsControl
にデータバインドしようとしています:
<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
このDataTemplate
を使用することにより、私は個別に正しくNode
に私のCanvas
要素を配置しようとしています:
<DataTemplate DataType="{x:Type Model:EndNode}">
<Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</DataTemplate>
しかし、期待どおりに動作していません。すべての私のノード要素は、同じ位置に、互いの上に描画されています。これを実現する方法上の任意の提案?
解決
添付プロパティはキャンバスの直接の子に取り組んでいます。あなたにもそのためのスタイルを追加したい場合がありますので、ItemsControlには、その直接の子としてのContentPresenterコントロールを配置します。
<ItemsControl ItemsSource="{Binding Path=Nodes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Path=XPos}" />
<Setter Property="Canvas.Top" Value="{Binding Path=YPos}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
ホープ、このことができます。
所属していません StackOverflow