1. ホーム
  2. c#

[解決済み] ItemsControl DataTemplateにCanvasのプロパティを設定する

2023-06-09 08:17:20

質問

これにデータバインディングをしようとしています。 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>

しかし、期待通りに動作していません。私のノード要素はすべて、同じ位置で互いに重なって描かれています。これを達成する方法について何か提案はありますか?

どのように解決するのですか?

添付のプロパティは Canvas . 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>