2

我正在寻找一种在面板中制作我的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.

4

1 回答 1

4

TreeViewItems布置自己的孩子,他们每个人都有自己的面板,因此您需要更改画布上的TreeView和项目。为此,应用更改面板的样式,通过资源或ItemContainerStyle.

<Style TargetType="TreeViewItem">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <TreeViewItem.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas />
                </ItemsPanelTemplate>
            </TreeViewItem.ItemsPanel>
        </Setter.Value>
    </Setter>
</Style>
于 2012-02-29T23:58:04.260 回答