我正在寻找一种在TreeView
面板中制作Canvas
展示位置的方法。
<TreeView>
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True"/>
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
<TreeViewItem Header="Root" IsExpanded="True" Canvas.Left="50" Canvas.Top="20">
<TreeViewItem Header="Alpha" Canvas.Left="10" Canvas.Top="50">
<TreeViewItem Header="Sub"/>
</TreeViewItem>
<TreeViewItem Header="Beta"/>
<TreeViewItem Header="Gamma"/>
</TreeViewItem>
</TreeView>
此解决方案允许我移动Root TreeViewItem
,但我希望TreeView
中的每个项目都尊重Canvas
附加属性。我的意思是,当Root {Left = 50,Top = 10}(这里它起作用)包含Alpha {Left = 0,Top = 0},Root将在[50,10]而Alpha在[0,0] ](坐标绝对是Canvas
)。
只有Root TreeViewItem
正确放置的原因是,我使用TreeView.ItemsPanel
。我觉得我应该使用TreeView.ItemContainerStyle
,但我真的不知道如何。
当然,我们非常感谢您提供任何帮助,最好还要加入HierarchicalDataTemplate
_我知道如何将解决方案与Binding
相关联。
答案 0 :(得分:3)
TreeViewItems
布置自己的孩子,他们每个人都有自己的面板,因此您需要更改TreeView
上的画布和项目。要执行此操作,请应用通过资源或ItemContainerStyle
隐式更改面板的样式。
<Style TargetType="TreeViewItem">
<Setter Property="ItemsPanel">
<Setter.Value>
<TreeViewItem.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</TreeViewItem.ItemsPanel>
</Setter.Value>
</Setter>
</Style>