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

恐怕不是直接的。如果您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 回答
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 回答