1

我使用 HierarchicalDataTemplate 创建了一个 Treeview:

<StackPanel x:Name="LayoutRoot" Background="White">
        <StackPanel.Resources>
            <sdk:HierarchicalDataTemplate x:Key="ChildTemplate" >
                <TextBlock FontStyle="Italic" Text="{Binding Path=Title}" />
            </sdk:HierarchicalDataTemplate>
            <sdk:HierarchicalDataTemplate x:Key="NameTemplate" 
            ItemsSource="{Binding Path=ChildTopics}" 
            ItemTemplate="{StaticResource ChildTemplate}">
                <TextBlock Text="{Binding Path=Title}" FontWeight="Bold" />
            </sdk:HierarchicalDataTemplate>
        </StackPanel.Resources>

        <sdk:TreeView Width="400"  Height="300" ItemsSource="{Binding}" 
        ItemTemplate="{StaticResource NameTemplate}" x:Name="myTreeView">

现在,如果我想禁用树视图,那么只需:

myTreeView.IsEnabled = false;

但是,我只想禁用几个节点。

Silverlight 不支持数据触发器,我无法访问子节点。

那么如何禁用子节点。

4

1 回答 1

0

嗯,既然你想禁用一些特定的项目,为什么不给虚拟机一个属性来这样做呢?例如

public ItemVm : ViewModelBase //assuming you're are using such a class
{
    public string Title
    {
        get { return GetValue(() => Title); }
        set { SetValueAndNotify(() => Title, value); }
    }

    public bool IsEnabled
    {
        get { return GetValue(() => IsEnabled); }
        set { SetValueAndNotify(() => IsEnabled, value); }
    }
}

现在你可以修改你的Template喜欢

<sdk:HierarchicalDataTemplate x:Key="NameTemplate" ItemsSource="{Binding Path=ChildTopics}" 
                              ItemTemplate="{StaticResource ChildTemplate}">
     <Border IsEnabled="{Binding IsEnabled}" BorderThickness="0" Background={x:Null} >
         <TextBlock Text="{Binding Path=Title}"  FontWeight="Bold" />
     </Border>
</sdk:HierarchicalDataTemplate>

希望这可以帮助。请注意,它未经测试。

于 2013-08-22T08:32:13.877 回答