我有树视图
<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中检测他们选择的节点是否是根节点?
答案 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>