鼠标悬停时 WPF 按钮背景透明度

2024-05-07

我正在尝试更改某些按钮上的鼠标悬停效果,因为它们设置了不同的自定义背景颜色,因此当前将相同浅蓝色的鼠标悬停方案不太适合。

我目前得到了这个:

    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="2">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="{Binding Path=Background}" Opacity="1" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="{Binding Path=Background}" Opacity="0.5" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

我似乎无法让它发挥作用;我试图保留按钮上设置的背景颜色,但当鼠标悬停时将背景不透明度更改为 0.5。

更改整个按钮的不透明度是有效的,但我不想让文本/内容也消失,只是使背景颜色变暗。

据我所知,在这里设置 SolidColorBrush 应该可以,但是如何从现有背景值中获取颜色值?

EDIT:

在改编了@Clemens 的以下答案后,我得到了这个,效果非常好!

    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <Rectangle x:Name="background" Fill="{TemplateBinding Background}"/>
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="background" Property="Opacity" Value="0.5"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter TargetName="background" Property="Opacity" Value="1"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

您可以设置OpacityControlTemplate 中的专用背景元素:

<Style TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid>
                        <Rectangle x:Name="background"
                                   Fill="{TemplateBinding Background}"/>
                        <ContentPresenter
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="background" Property="Opacity" Value="0.5"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

鼠标悬停时 WPF 按钮背景透明度 的相关文章

  • 模拟 WCF 客户端代理的最佳方法

    有没有办法使用 Rhino 模拟框架来模拟 WCF 客户端代理 以便我可以访问 Channel 属性 我正在尝试对 Proxy Close 方法进行单元测试 但由于代理是使用抽象基类构造的ClientBase
  • Quartz 与“反应式扩展”

    我正在寻找 C 的调度库 很长一段时间以来 我认为 唯一 的选择是 Quartz NET 它非常强大并且工作得很好 但是当我发现 Reactive Extensions RX http msdn microsoft com en us da
  • 如何使用AutoMapper按照类中定义的顺序映射对象?

    给定这两个对象 我使用非常不同的对象来更好地阐明 public class Car public string Brand get set public int Speed get set public class Apple public
  • 为什么抽象类应该实现抽象基类的抽象方法?

    在下面的示例中 该类Derived实现抽象方法method从课堂上Main 但我想不出在抽象中填写方法体的理由Derived类的实现 当然 我应该只在实际类中实现抽象方法 那么我怎样才能避免这样做呢 我还可以做些什么 abstract cl
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 运算符“">”不能应用于类型“ulong”和“int”

    我很好奇为什么 C 编译器只为第二个 if 语句提供错误消息 enum Permissions ulong ViewListItems 1L public void Method int mask 138612833 int compare
  • 如何清除 (WPF) DataGrid 中的单元格(使其获取 NULL 值)?

    我们有一个列绑定到一个可为空的 SQL 整数值 当用户尝试 清除 单元格时DataGrid 我们得到验证错误 无法转换 如何将其设置为空并将 空 值绑定到基础列 我已经用谷歌搜索了这个问题两天并找到了任何东西 我试图编辑我对 HCL 的评论
  • MS Source Server - 使用 srctool 查看时源流显然不存在

    我一直在尝试安装 MS 调试工具中的 MS Source Server 内容 目前 我正在通过 Subversion 索引命令运行我的代码 pdbs 该命令现在按预期运行 它为给定的 pdb 文件创建流并将其写入 pdb 文件 但是 当我在
  • 缓冲数据库游标中的数据,同时保持 UI 响应

    我有一个已填充的数据库目录和一个可用于检索对象的游标 这个目录显然可能非常大 我想做的是使用反应式用户界面缓冲数据 同时保持 UI 数据绑定和响应 我按照步骤操作here http www interact sw co uk iangblo
  • WUApiLib IUpdateInstaller2 产生错误;某些操作系统更新安装其他操作系统会抛出 HResult -2145124318

    更新是从本地服务器下载的 而不是从 WUS 或 Microsoft 存储库下载的 本地服务器基于 Linux 该主机包含每次更新的内容 我没有使用UpdateDownloader要从Microsoft服务器下载 我手动下载更新内容 然后使用
  • 使用实体框架从 2 个表返回数据

    我正在使用 MVC3 和实体框架 但我需要来自不同表的更多数据 通常我会做这样的事情来从表中获取数据 Table Users id username 在代码中我会做这样的事情来获取所有用户 public static IEnumerable
  • LINQ to Entities 区分大小写的比较

    这不是 LINQ to Entities 中区分大小写的比较 Thingies First t gt t Name ThingamaBob 如何使用 LINQ to Entities 实现区分大小写的比较 那是因为你正在使用LINQ 实体最
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面

随机推荐

  • 如何让 AngularJS 绑定到 A 标签的 title 属性?

    目的是让产品名称出现在缩略图的工具提示中 浏览器不会从 ng title 或 ng attr title 创建工具提示 我们使用 AngularJS 版本 1 0 7 您可以在任何属性前面添加 ng 或 ng attr Angular 将进
  • 如何使用 React Native 下载文件?

    我正在使用 React Native 为 Android 和 iOS 构建一个应用程序 我试图让用户在单击按钮时下载 PDF 文件 反应本机文件下载 https www npmjs com package react native file
  • C++11 中shared_ptr 的原子操作

    通过阅读 c 11 草案n3242 http www open std org jtc1 sc22 wg21 docs papers 2011 n3242 pdf 第20 7 2 5节 看起来我们对shared ptr有原子操作 这使我们能
  • CodeIgniter,将数据从模型传递到控制器以在视图中使用

    我想将模型中查询的数据传递给控制器 为此我使用 return data 然后在我使用的控制器中 this gt load gt view my view data 据我了解var dump data 视图中应该显示查询的结果 事实并非如此
  • 使用比较器对向量进行排序,比较器会动态改变其行为

    我有一个自定义结构体的向量和一个属性列表 用于按优先级降序对该向量进行排序 例如 struct TheStruct artist String title String date String let order vec Vec
  • 具有多个 Angular + Nativescript 代码共享项目和可重用库的 Angular 工作区

    环境 tns 信息 获取 NativeScript 组件版本信息 组件原生脚本有更新 您当前的版本是 5 1 0 最新的可用版本是 5 1 1 组件 tns core modules 有更新 您当前的版本是 5 1 1 最新的可用版本是 5
  • 当用户滚动到页面底部时显示页脚

    这是我的页脚代码 div class row div class col md 12 div the part that always showing at the bottom div div div class col md 12 di
  • 有没有办法以编程方式检查 Excel 文件是否已打开

    我想检查特定的 Excel 文件是否已打开 否则 当我在 C 程序中重新打开同一文件时 它将以只读格式打开 有什么方法可以查出文件是否已经打开 如果该文件被另一个程序打开 则此代码可以帮助您找出该文件 但您将无法打开它 protected
  • 确定 .NET 类型的序列化大小和非托管内存效率

    我的问题是是否可以确定引用类型的序列化大小 以字节为单位 情况如下 我使用 BinaryFormatter 类来序列化基本 NET 类型 例如 Serializable public class Foo public string Foo1
  • 旋转设备后 Android 对话框重新打开

    我正在编写一个非常简单的应用程序来打开我的自定义共享对话框 XML 布局仅包含 1 个按钮
  • 在Rcpp中编译多个源文件

    我有以下目录结构 my func my func r cpp my func c my func h my func test c matrix matrix h matrix c The matrix目录包含一些矩阵结构matrix h以
  • 将图像小部件调整为父级高度但溢出宽度

    我想创建一个图像小部件 其大小适合其父级的高度 但随后根据显示图像的纵横比溢出父级的宽度 我试过了FittedBox和组合LayoutBuilder and SizedOverflowBox 但没有运气 到目前为止 我只能将图像的宽度和高度
  • 在 ttk 进度条中显示百分比

    我正在尝试显示百分比ttk Progressbar当该功能运行时提醒用户已执行的过程的范围以及剩余的内容 我能够显示百分比 但百分比最多23 哪一个是length of my tuple 我怎样才能让它达到100 length of tup
  • FreeMM 与 ShareMem

    我们有很多用 delphi 和 c builder 编写的 dll 库 并使用 sharemem 和 borlndmm dll 3d party 库中的对齐问题迫使我们转向 delphi 2007 中的新内存管理器 有人可以帮我解释一下 共
  • Linux 上的 OpenCL 编译

    我是 OpenCL 的新手 从昨天开始 我尝试使用 OpenCL 进行并行编程 而不是使用我更熟悉且以前体验过的 CUDA 现在我有 NVIDIA GTX 580 GPU Ubuntu Linux 12 04 操作系统和 CUDA SDK
  • 比较java中的数组和索引位置[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在一次 java 面试中 有人问我如
  • JS - document.getelementbysrc?

    是否可以从 src 属性的值获取元素 没有 DOM 方法可以按属性过滤元素 您需要遍历特定标签的所有元素并过滤掉那些匹配的元素src value function getElementsBySrc srcValue var nodes va
  • pandas:分割字符串和计数值? [复制]

    这个问题在这里已经有答案了 我有一个 pandas 数据集 其中有一列是逗号分隔的字符串 例如1 2 3 10 data id 1 score 9 topics 11 22 30 id 2 score 7 topics 11 18 30 i
  • 如何对 int[] 数组求和[重复]

    这个问题在这里已经有答案了 给定一个数组A of 10 ints 初始化一个名为的局部变量sum并使用循环查找数组中所有数字的总和A 这是我提交的答案 sum 0 while A lt 10 sum sum A 我在这个问题上没有得到任何分
  • 鼠标悬停时 WPF 按钮背景透明度

    我正在尝试更改某些按钮上的鼠标悬停效果 因为它们设置了不同的自定义背景颜色 因此当前将相同浅蓝色的鼠标悬停方案不太适合 我目前得到了这个