You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TreeViewItem鼠标悬停时显示子元素Rectangle Hb

实现TreeViewItem鼠标悬停时显示模板内的Rectangle

需求说明

已实现TreeViewItem鼠标悬停时背景变为绿色,现在需要补充:当TreeViewItem被鼠标悬停时,将其ItemTemplate中名为Hb的Rectangle的Visibility属性设为Visible。

解决方案

TreeViewItem的Style触发器无法直接访问其ItemTemplate内部的元素,因此需要将触发器定义在HierarchicalDataTemplate内部,通过RelativeSource绑定父级TreeViewItem的IsMouseOver属性来实现目标效果。

修改后的完整XAML代码

<Window.Resources>
    <VisualBrush x:Key="HighlightBrush">LightBlue</VisualBrush>
    <Style x:Key="RectangleStyle" TargetType="Rectangle">
        <Setter Property="Fill" Value="{StaticResource HighlightBrush}"/>
    </Style>
</Window.Resources>
<TreeView Grid.Column ="0" Name="MyTreeView">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Green" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>
    <d:TreeView.ItemsSource >
        <x:Array Type="system:String">
            <system:String>First element</system:String>
            <system:String>Second element</system:String>
        </x:Array>
    </d:TreeView.ItemsSource>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type system:String}" >
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding .}" d:Text="{Binding .}" />
                <Rectangle x:Name="Hb" Width="100000" Margin="-10000,0,0,0" Panel.ZIndex="-1" Visibility="Hidden" Style="{DynamicResource  RectangleStyle}" />
            </StackPanel>
            <!-- 模板内触发器,绑定父级TreeViewItem的鼠标悬停状态 -->
            <HierarchicalDataTemplate.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsMouseOver}" Value="True">
                    <Setter TargetName="Hb" Property="Visibility" Value="Visible" />
                </DataTrigger>
            </HierarchicalDataTemplate.Triggers>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

关键修改点

  • 在HierarchicalDataTemplate中新增HierarchicalDataTemplate.Triggers节点
  • 通过DataTrigger绑定父级TreeViewItem的IsMouseOver属性
  • 用TargetName="Hb"指定目标Rectangle,将其Visibility设为Visible

内容的提问来源于stack exchange,提问作者Jack Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:35:06