在ItemsControl DataTemplate中设置Canvas属性

我正在尝试与此绑定ItemsControl

<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

<ItemsControl.ItemsPanel>

<ItemsPanelTemplate>

<Canvas />

</ItemsPanelTemplate>

</ItemsControl.ItemsPanel>

</ItemsControl>

通过使用this 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>

以上是 在ItemsControl DataTemplate中设置Canvas属性 的全部内容, 来源链接: utcz.com/qa/404684.html

回到顶部