WPF/Silverlight:扩展根树节点

for*_*yez 4 c# silverlight wpf xaml

是的,乍一看这似乎很基本。但问题是:我使用 MVVM 和分层数据绑定来填充树。

我很难做的是让第一个节点扩展。原因是:

  1. 由于我位于视图模型代码中,因此我没有直接引用树。(MVVM 让我抓狂)。

  2. 我实际上已经弄清楚如何通过在视图的 xaml 中使用样式来扩展所有节点,但我现在只想扩展第一个节点,但我无法弄清楚。

有任何想法吗?

Dan*_*air 5

我能够实现此目的的最简单方法是使用样式(您可以将所有内容保留在 XAML 中,并且不需要任何特殊的 MVVM 属性)。您可以在实际的 TreeView 元素上设置顶级 ItemContainerStyle 来设置根 TreeViewItem 的样式并将其显示为展开的。然后将 HierarchicalDataTemplate 元素上的 ItemContainerStyle 设置为其他级别上所有节点的默认 TreeViewItem 样式。BasedOn 属性将使您可以轻松继承整个 TreeViewItem 样式,并且仅更改 IsExpanded 属性。

主要的 TreeView XAML:

<TreeView x:Name="Tree" ItemContainerStyle="{StaticResource RootTreeViewItemStyle}">
    <TreeView.ItemTemplate>
        <common:HierarchicalDataTemplate ItemContainerStyle="{StaticResource TreeViewItemStyle}">
            <!-- rest of your template... -->
        </common:HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

您的基本 TreeViewItem 样式:

<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
    <!-- your normal or default TreeViewStyle... -->
</Style>
Run Code Online (Sandbox Code Playgroud)

根 TreeViewItem 样式:

<Style x:Key="RootTreeViewItemStyle" TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
    <Setter Property="IsExpanded" Value="True"/>
</Style>
Run Code Online (Sandbox Code Playgroud)