私はwpf TreeViewを持っています - いくつかのデータにバインドされています。ツリー ビューはウィンドウの左側にあり、ツリーがナビゲーションである 2 つの領域に分割され、右側のパネルは選択したツリー ノードに応じてコンテンツが変化します。
ツリービューのすべてのノードが詳細情報を生成するわけではありません。それらのノードの選択を無効にしたい。何か案が?
ありがとう
私はwpf TreeViewを持っています - いくつかのデータにバインドされています。ツリー ビューはウィンドウの左側にあり、ツリーがナビゲーションである 2 つの領域に分割され、右側のパネルは選択したツリー ノードに応じてコンテンツが変化します。
ツリービューのすべてのノードが詳細情報を生成するわけではありません。それらのノードの選択を無効にしたい。何か案が?
ありがとう
@ jama64 : Style を Property IsEnabled から Focusable に変更すると、目的を達成できます。
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Focusable" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
ソースにブーリアンプロパティのようなものがありますHasDetails
か?その場合、このようなものを使用できます。HasDetails
DataContext にバインドする ItemContainerStyle に MultiDataTrigger を作成し、IsSelected
両方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 のを無効にするには、これを使用できます
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>