我正在寻找一种方法来使我的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>这个解决方案允许我在根TreeViewItem之间移动,但我希望TreeView中的每一项都要遵守Canvas附加的属性。我的意思是,当根{Left = 50,0,0 = 10} (在这里有效)包含Alpha {Left = 0,Top=0}时,根将位于50,10,Alpha位于Alpha。
之所以只有根TreeViewItem正确地放在自己的位置,是因为我使用了TreeView.ItemsPanel。我有一种感觉,我应该使用TreeView.ItemContainerStyle,但我真的不知道怎么做。
当然,任何帮助都是非常感谢的,最好也结合HierarchicalDataTemplate,这样_I就知道如何将解决方案与Binding连接起来。
发布于 2012-03-01 07:58:04
TreeViewItems布局自己的子项,每个子项都有自己的面板,因此您需要更改TreeView上的画布和项。为此,可以通过资源或ItemContainerStyle隐式地应用更改面板的样式。
<Style TargetType="TreeViewItem">
<Setter Property="ItemsPanel">
<Setter.Value>
<TreeViewItem.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</TreeViewItem.ItemsPanel>
</Setter.Value>
</Setter>
</Style>https://stackoverflow.com/questions/9503928
复制相似问题