10

私はwpf TreeViewを持っています - いくつかのデータにバインドされています。ツリー ビューはウィンドウの左側にあり、ツリーがナビゲーションである 2 つの領域に分割され、右側のパネルは選択したツリー ノードに応じてコンテンツが変化します。

ツリービューのすべてのノードが詳細情報を生成するわけではありません。それらのノードの選択を無効にしたい。何か案が?

ありがとう

4

2 に答える 2

22

@ jama64 : Style を Property IsEnabled から Focusable に変更すると、目的を達成できます。

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

ソースにブーリアンプロパティのようなものがありますHasDetailsか?その場合、このようなものを使用できます。HasDetailsDataContext にバインドする 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>

アップデート

TreeViewItemHasDetails が False のを無効にするには、これを使用できます

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