我正在尝试与此绑定ItemsControl:
ItemsControl
<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>
通过使用this DataTemplate,我试图将Node元素分别Canvas正确放置在正确的位置:
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>