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)
你在源代码中有类似布尔属性的HasDetails东西吗?在这种情况下,你可以使用这样的东西.在结合到ItemContainerStyle创建MultiDataTrigger HasDetails在DataContext的,并IsSelected为TreeViewItem,如果都为真(很好,不可否认的是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)