10

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

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

谢谢

4

2 回答 2

22

@jama64:如果将样式从属性 IsEnabled 更改为可聚焦,则可以实现您想要的。

<TreeView.ItemContainerStyle>
     <Style TargetType="{x:Type TreeViewItem}">
         <Setter Property="Focusable" Value="{Binding HasDetails}"/>
     </Style>
</TreeView.ItemContainerStyle>
于 2011-07-25T16:34:32.563 回答
5

您的源代码中是否有类似布尔属性的HasDetails东西?在这种情况下,您可以使用类似的东西。HasDetails在绑定到DataContextIsSelected的ItemContainerStyle 中创建一个 MultiDataTrigger,TreeViewItem如果两者都为 True(好吧,HasDetails 为 False 的 True :-),您将启动一个“取消选择”新选择的 Storyboard 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>

更新

要禁用TreeViewItemHasDetails 为 False 的 's,您可以使用此

<TreeView ...>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
于 2011-02-01T21:55:20.337 回答