我有 wpf TreeView - 绑定到一些数据。Treeview 位于窗口的左侧,该窗口分为两个区域,其中树是导航,右侧的面板根据所选的树节点更改内容。
并非树视图的所有节点都产生详细信息。我想禁用这些节点的选择。任何想法?
谢谢
我有 wpf TreeView - 绑定到一些数据。Treeview 位于窗口的左侧,该窗口分为两个区域,其中树是导航,右侧的面板根据所选的树节点更改内容。
并非树视图的所有节点都产生详细信息。我想禁用这些节点的选择。任何想法?
谢谢
@jama64:如果将样式从属性 IsEnabled 更改为可聚焦,则可以实现您想要的。
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Focusable" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
您的源代码中是否有类似布尔属性的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>
更新
要禁用TreeViewItem
HasDetails 为 False 的 's,您可以使用此
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>