在Silverlight中展开整个TreeView

And*_*nea 8 silverlight treeview

如何在Silverlight中扩展整个TreeView?

编辑:这是XAML:

<controls:TreeView x:Name="tv">
    <controls:TreeView.ItemTemplate>
        <common:HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <CheckBox IsChecked="{Binding Visible, Mode=TwoWay}" Content="{Binding Name}"/>
        </common:HierarchicalDataTemplate>
    </controls:TreeView.ItemTemplate>
</controls:TreeView>
Run Code Online (Sandbox Code Playgroud)

也许使用ItemTemplate使得ItemContainerGenerator.ContainerFromIndex在任何索引上都返回null?

Mar*_*ark 18

我知道这有点晚了但我在寻找答案时发现了这一点,并且发现在Silverlight 4中你可以使用隐式主题来做到这一点:

<Style TargetType="controls:TreeViewItem">
    <Setter Property="IsExpanded" Value="True" />
</Style>
Run Code Online (Sandbox Code Playgroud)

在Silverlight 5中,您必须将此代码添加到该部分才能实现此目的.

<Style TargetType="sdk:TreeViewItem">
    <Setter Property="IsExpanded" Value="True" />
</Style>
Run Code Online (Sandbox Code Playgroud)


小智 9

首先,请阅读这篇文章:http: //bea.stollnitz.com/blog/?p = 55

其次,继承TreeViewItem和TreeView:

public class TreeViewItemEx : TreeViewItem {
    protected override DependencyObject GetContainerForItemOverride() {
        TreeViewItemEx tvi = new TreeViewItemEx();
        Binding expandedBinding = new Binding("IsExpanded");
        expandedBinding.Mode = BindingMode.TwoWay;
        tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
        return tvi;
    }
}

public class TreeViewEx : TreeView {
    protected override DependencyObject GetContainerForItemOverride() {
        TreeViewItemEx tvi = new TreeViewItemEx();
        Binding expandedBinding = new Binding("IsExpanded");
        expandedBinding.Mode = BindingMode.TwoWay;
        tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);

        return tvi;
    }
}
Run Code Online (Sandbox Code Playgroud)

第三,将Model的属性绑定到"IsExpanded".