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

通过另一控件触发器隐藏控件:基于IsMouseOver控制TextBlock可见性

实现_tb2鼠标悬停时控制_tb1的可见性

在WPF里可以通过以下几种方式实现需求:

方法1:使用Style的DataTrigger

直接在_tb1的样式里添加数据触发器,绑定_tb2的IsMouseOver属性来切换可见性:

<TextBlock x:Key="_tb1" Text="需要显示/隐藏的文本">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <!-- 默认隐藏 -->
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <!-- 当_tb2鼠标悬停时显示 -->
                <DataTrigger Binding="{Binding ElementName=_tb2, Path=IsMouseOver}" Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

<TextBlock x:Key="_tb2" Text="悬停我显示_tb1"/>

注意:如果两个TextBlock不在同一命名作用域(比如分属不同ResourceDictionary),可以用{x:Reference _tb2}替代ElementName来绑定。

方法2:后台代码处理事件

通过监听_tb2的鼠标进入/离开事件,直接修改_tb1的可见性:

private void YourContainer_Loaded(object sender, RoutedEventArgs e)
{
    var tb1 = FindResource("_tb1") as TextBlock;
    var tb2 = FindResource("_tb2") as TextBlock;

    if (tb1 == null || tb2 == null) return;

    tb2.MouseEnter += (s, args) => tb1.Visibility = Visibility.Visible;
    tb2.MouseLeave += (s, args) => tb1.Visibility = Visibility.Collapsed;
}

记得在对应的容器(比如Window、UserControl)的Loaded事件中调用这段代码。

方法3:使用BooleanToVisibilityConverter

利用WPF内置的转换器,直接将IsMouseOver的布尔值转换为可见性:

<Window.Resources>
    <!-- 内置转换器,无需自定义 -->
    <BooleanToVisibilityConverter x:Key="BoolToVis"/>

    <TextBlock x:Key="_tb1" Text="需要显示/隐藏的文本"
               Visibility="{Binding ElementName=_tb2, Path=IsMouseOver, Converter={StaticResource BoolToVis}}"/>
    <TextBlock x:Key="_tb2" Text="悬停我显示_tb1"/>
</Window.Resources>

这种方式最简洁,适合纯UI层的简单交互场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:01:16