如何根据条件阻止选择TreeViewItem

jam*_*a64 9 wpf treeview xaml treeviewitem

我有wpf TreeView - 绑定到一些数据.Treeview位于窗口的左侧,该窗口分为两个区域,其中树是导航,右侧的面板根据所选的树节点更改内容.

并非树视图的所有节点都生成详细信息.我想禁用这些节点的选择.任何的想法?

谢谢

M.C*_*.C. 20

@ jama64:如果将Style从Property IsEnabled更改为Focusable,您可以实现所需.

<TreeView.ItemContainerStyle>
     <Style TargetType="{x:Type TreeViewItem}">
         <Setter Property="Focusable" Value="{Binding HasDetails}"/>
     </Style>
</TreeView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)


Fre*_*lad 5

你在源代码中有类似布尔属性的HasDetails东西吗?在这种情况下,你可以使用这样的东西.在结合到ItemContainerStyle创建MultiDataTrigger HasDetails在DataContext的,并IsSelectedTreeViewItem,如果都为真(很好,不可否认的是HasDetails是假:-),你开始一个故事板是"取消选择"新选择TreeViewItem.

这将禁用所有TreeViewItem没有详细信息的选项,但它们仍然可以扩展.希望这就是你要找的东西

<TreeView ...>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding HasDetails}" Value="False"/>
                        <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames BeginTime="00:00:00"
                                                                Storyboard.TargetProperty="(TreeViewItem.IsSelected)">
                                    <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False"/>
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

更新

要禁用TreeViewItemHasDetails为False的位置,您可以使用它

<TreeView ...>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)