在一个ItemsControl DataTemplate中设置画布属性 [英] Setting Canvas properties in an ItemsControl DataTemplate
本文介绍了在一个ItemsControl DataTemplate中设置画布属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想数据绑定到这个的ItemsControl
:
<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
通过使用该的DataTemplate
,我想单独定位在<$ C $我的节点
元素C>画布正确的:
By using this DataTemplate
, I'm trying to individually position my Node
elements on the Canvas
correctly:
<DataTemplate DataType="{x:Type Model:EndNode}">
<Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</DataTemplate>
但是,按预期它不工作。我的所有节点的元素上绘制在相同的位置彼此的顶部。如何做到这一点有什么建议?
However, it's not working as expected. All my node elements are drawn on top of each other in the same position. Any suggestions on how to accomplish this?
推荐答案
附加的属性只在画布上直接儿童工作。 ItemsControl中将会把内容presenter管制,它的直接孩子,所以你可能要添加一个样式的还有:
The attached properties only work on direct children of the Canvas. ItemsControl will place ContentPresenter controls as its direct children, so you might want to add a style for that as well:
<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中设置画布属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文