子控件的 WPF 鼠标悬停触发效果

     2023-03-06     239

关键词:

【中文标题】子控件的 WPF 鼠标悬停触发效果【英文标题】:WPF Mouseover Trigger Effect for Child Controls 【发布时间】:2011-12-01 18:47:51 【问题描述】:

假设我有这段代码:

<Window>
    <Window.Resources>
        <Color x:Key="MyColor"
               A="255"
               R="152"
               G="152"
               B="152" />
        <DropShadowEffect x:Key="MyEffect" 
                          ShadowDepth="0"
                          Color="StaticResource MyColor"
                          BlurRadius="10" />
        <Style x:Key="MyGridStyle"
               TargetType="x:Type Grid">
            <Setter Property="Height"
                    Value="200" />
            <Setter Property="Width"
                    Value="200" />
            <Style.Resources>
                <Style TargetType="x:Type TextBlock">
                    <Setter Property="Width"
                            Value="100" />
                </Style>
                <Style TargetType="x:Type Image">
                    <Setter Property="Height"
                            Value="100" />
                    <Setter Property="Width"
                            Value="100" />
                </Style>
            </Style.Resources>
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="true">
                    <!-- How do I apply my effect when this grid is hovered over to Image and TextBox, but not the grid itself? -->
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid Style="StaticResource MyGridStyle">
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Image Grid.Row="0"
               Grid.Column="0"
               Source="image.png" />
        <TextBlock Grid.Row="0"
                   Grid.Column="0"
                   Text="Hover Over Me" />
    </Grid>
</Window>

基本上我有一个样式应用于网格,它表示其中的任何文本块或图像都应该是特定大小的样式。

我想在 Grid 上创建一个触发器,使效果应用于 Grid 内的所有 TextBlocks 和图像,但不应用于 Grid 本身。

我可以将 Trigger 直接应用于 TextBlock 和/或 Image,但效果只发生在每个元素上。无论我悬停在哪个内部子元素上,我都需要对 Grid 中的任何 TextBlock 和/或 Image 产生效果。

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

我们曾经有过类似的要求,即只对列表框的一行内容进行外部发光,而不是整个行。我们得到了这篇文章的帮助...http://drwpf.com/blog/2008/03/25/itemscontrol-i-is-for-item-container。

【讨论】:

【参考方案2】:

你可以反过来做。也就是说,将DataTriggers 添加到ImageTextBlock 并让它们在IsMouseOver 上为祖先Grid 触发。

注意:如果您希望鼠标移到Grid 上时立即触发此效果,您需要将Background 设置为一个值,例如Transparent。默认情况下,Backgroundnull,并且该值不用于命中测试。

<Style x:Key="MyGridStyle" TargetType="x:Type Grid">
    <!--<Setter Property="Background" Value="Transparent"/>-->
    <Setter Property="Height" Value="200" />
    <Setter Property="Width" Value="200" />
    <Style.Resources>
        <Style TargetType="x:Type TextBlock">
            <Setter Property="Width" Value="200" />
            <Style.Triggers>
                <DataTrigger Binding="Binding RelativeSource=RelativeSource AncestorType=Grid,
                                               Path=IsMouseOver" Value="True">
                    <Setter Property="Effect" Value="StaticResource MyEffect"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <Style TargetType="x:Type Image">
            <Setter Property="Height" Value="200" />
            <Setter Property="Width" Value="200" />
            <Style.Triggers>
                <DataTrigger Binding="Binding RelativeSource=RelativeSource AncestorType=Grid,
                                               Path=IsMouseOver" Value="True">
                    <Setter Property="Effect" Value="StaticResource MyEffect"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>

【讨论】:

删除 WPF 中 ListView 上的鼠标悬停效果

】删除WPF中ListView上的鼠标悬停效果【英文标题】:RemovethemouseovereffectonaListViewinWPF【发布时间】:2013-06-1520:06:13【问题描述】:如何让我的ListView上的淡蓝色鼠标悬停效果?当我触摸屏幕时,会出现一个淡蓝色选择器,并在我上... 查看详情

如果父元素也有鼠标悬停,如何为子元素触发鼠标悬停事件?

】如果父元素也有鼠标悬停,如何为子元素触发鼠标悬停事件?【英文标题】:HowcanIhaveamouseovereventfireforachildelementiftheparentelementhasamouseovertoo?【发布时间】:2013-02-2200:28:42【问题描述】:我的页面上有一个“帮助”区域,只要用... 查看详情

wpf,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

原文:WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件。例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要... 查看详情

无论鼠标是不是在子控件上,都更改控件的背景颜色

】无论鼠标是不是在子控件上,都更改控件的背景颜色【英文标题】:Changebackgroundcolorofcontrolregardlessifmouseisoverachildcontrol无论鼠标是否在子控件上,都更改控件的背景颜色【发布时间】:2021-12-3006:32:43【问题描述】:我正在制作... 查看详情

wpf,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件。例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开。在这个过程中,控件1只会触发MouseDown事件,而控... 查看详情

如何禁用由子元素触发的 mouseout 事件?

...9-2522:11:07【问题描述】:让我详细描述一下这个问题:当鼠标悬停在一个元素上时,我想显示一个绝对定位的div。使用jQuery真的很简单,而且效果很好。但是当鼠标移过其中一个子元素时,它会触发包含div的mouseout事件。悬停子... 查看详情

htmldiv鼠标悬停控制子控件显示与隐藏

HTMLdiv鼠标悬停控制子控件显示与隐藏  1<!DOCTYPEhtml>2<html>3<head>4<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>5<title></title>6<metacharset="ut 查看详情

如何将鼠标悬停在子元素上而不悬停在 CSS 中的父元素上?

】如何将鼠标悬停在子元素上而不悬停在CSS中的父元素上?【英文标题】:HowdoIhoveroverachildelementwithouthoveringovertheparentinCSS?【发布时间】:2017-04-1909:59:51【问题描述】:是否可以将鼠标悬停在嵌套的子元素上而不触发父元素上的... 查看详情

jquery鼠标悬停效果bug,mouseover事件总是在mouseout时触发几次

】jquery鼠标悬停效果bug,mouseover事件总是在mouseout时触发几次【英文标题】:jquerymousehovereffectbug,mouseovereventalwaystriggersafewtimesonmouseout【发布时间】:2011-11-0212:32:41【问题描述】:我有一个简单的画廊网格,其中包含一个显示标题... 查看详情

按钮悬停效果和触摸 (WPF)

...带有Button的WPF桌面应用程序。当我在普通PC上运行它并将鼠标光标移到按钮上时,它变成蓝色(默认Windows主题)。当我将光标移出时,按钮再次变灰。很正常的行为。但是当我在Windows8平板电脑上运行它时,会发生以下情况:我... 查看详情

wpf xaml 带有图像的按钮,在鼠标上更改颜色如何响应触发器?

】wpfxaml带有图像的按钮,在鼠标上更改颜色如何响应触发器?【英文标题】:wpfxamlButtonwithimage,changecoloronmouseoverhowtorespondtotriggers?【发布时间】:2021-07-2720:59:51【问题描述】:在wpf、xaml中,我一直试图弄清楚当鼠标悬停时如何... 查看详情

当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头

】当鼠标通过QSS悬停在QComboBox上时,样式QComboBox的子控件向下箭头【英文标题】:StyleQComboBox\'ssub-controldown-arrowwhenmouseishoveringovertheQComboBoxviaQSS【发布时间】:2015-01-1700:00:01【问题描述】:我知道如何在鼠标悬停时设置QComboBox的... 查看详情

实现搜索框跟随鼠标悬停菜单功能(代码片段)

...对于当前窗口的x坐标,其中客户区域不包括窗口自身的控件和滚动条。event.clientY设置或获取鼠标指针位置相对于当前窗口的y坐标,其中客户区域不包括窗口自身的控件和滚动条。event.offsetX设置或获取鼠标指针位置相对于触发... 查看详情

css/javascript:检查触发悬停效果的图像像素

...。我有某些图像(圆形,.png类型,透明背景)-当用户将鼠标悬停在任何图像上时,它的颜色应该会改变(在这种情况下,我隐藏当前图像并显示其不同 查看详情

如何使悬停信息气泡出现在 WPF 中的鼠标悬停上?

】如何使悬停信息气泡出现在WPF中的鼠标悬停上?【英文标题】:HowcanImakeahoverinfobubbleappearonmouseoverinWPF?【发布时间】:2010-12-2222:39:48【问题描述】:我想让文本气泡在鼠标悬停在TextBlock上时出现。以下代码是我能得到的最接近... 查看详情

wpf效果第二百零五篇之自定义导航控件

前面摸索了一下会简单玩耍自定义控件了;今天再次分享一下N年前想要在GIS实现的一个导航控件;来看看最终实现的效果:1、先来看看前台xaml布局:2、后台路由事件就参照上一篇快捷方式3、关键依赖属性的回调触发路由事件:4、内... 查看详情

有没有办法使控件对 WPF 中的鼠标事件透明?

】有没有办法使控件对WPF中的鼠标事件透明?【英文标题】:IsthereawaytomakecontrolstransparenttomouseeventsinWPF?【发布时间】:2011-05-1217:22:15【问题描述】:有没有办法让鼠标事件传递到后面的控件?【问题讨论】:【参考方案1】:我... 查看详情

如何通过将鼠标悬停在同一页面上的图像上来触发 CSS 动画按钮

】如何通过将鼠标悬停在同一页面上的图像上来触发CSS动画按钮【英文标题】:Howtotriggeracssanimatedbuttonbyhoveringoveranimageonthesamepage【发布时间】:2013-08-2501:17:58【问题描述】:我的网站出现问题。在主页上,我有一张图片。图片... 查看详情