选择treeview根节点上的“启用”按钮

时间:2012-10-22 10:34:03

标签: wpf xaml treeview

我有树视图

<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中检测他们选择的节点是否是根节点?

2 个答案:

答案 0 :(得分: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属性。

答案 1 :(得分: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>