0

私はツリービューを持っています

<TreeView HorizontalAlignment="Stretch" Name="tvLocations" VerticalAlignment="Stretch" />

そして、ボタン

        <Button Name="cmdUpdateLocation" Grid.Row="1" Content="Update" Width="80" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,88,0">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=tvLocations, Path=SelectedItem}" Value="{x:Null}">
                        <Setter Property="IsEnabled" Value="False"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

これにより、ツリーのどのレベルをクリックしてもボタンが有効になります。ツリー ビュー内のアイテムが選択されているときにボタンを有効にしたいが、それがルート ノードである場合にのみ、またはルートでない場合はボタンを無効にしたい。選択したノードがルート ノードであるかどうかを XAML で検出できますか?

4

2 に答える 2

1

コードビハインドを必要としない代替ソリューションを見つけました。TreeViewItem 型の祖先を検索し、それが {x:Null} に等しい場合にトリガーするバインディングでトリガーを使用します。TreeViewItem の祖先がないため、これはルート ノードに対して発生します。次のトリガーの例では、ルート ノードが折りたたまれないようにします。

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" Value="{x:Null}">
    <Setter Property="Visibility" Value="Visible" TargetName="ItemsHost" />
</DataTrigger>
于 2013-05-16T14:54:27.397 に答える
1

直接ではないと思います。TreeView.Itemsタイプの場合TreeViewItemは、ここで説明されているソリューションを使用できます: WPF Treeview root node

<Style TargetType="{x:Type Button}">
    <Setter Property="IsEnabled" Value="False" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=tvLocations, Path=SelectedItem.(local:MyTreeView.IsRootNode)}" Value="True">
            <Setter Property="IsEnabled" Value="True" />
        </DataTrigger>
    </Style.Triggers>
</Style>

他のタイプの場合TreeView.Itemsは、アイテムに追加の IsRootNode プロパティを実装する必要があると思います。

于 2012-10-22T13:37:59.410 に答える