WPF 样式按钮 MouseOver 问题

2023-11-21

我正在尝试在按钮上制作一个简单的鼠标悬停效果,当鼠标悬停时它确实会改变颜色,但颜色会立即更改为默认按钮背景...我如何覆盖此行为?

这是我的代码:

Style myBtnStyle = new Style();
Trigger bla = new Trigger() { Property = IsMouseOverProperty, Value = true };
bla.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.Black));
myBtnStyle.Triggers.Add(bla);
button2.Style = myBtnStyle;

根据这个帖子,这个精美的动画是内置的,要删除它,您将需要覆盖ControlTemplate为您Button。幸运的是,这并不太难。我用了这个帖子作为源材料并提出以下内容Style这给了你这个想法。

<Style x:Key="MouseOverButtonStyle" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <ControlTemplate.Resources>
                    <Style x:Key="ShadowStyle">
                        <Setter Property="Control.Foreground" Value="LightGray" />
                    </Style>
                </ControlTemplate.Resources>
                <Border Name="border" BorderThickness="1" Padding="4,2" BorderBrush="DarkGray" CornerRadius="3" Background="{TemplateBinding Background}">
                    <Grid >
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="contentShadow" Style="{StaticResource ShadowStyle}">
                            <ContentPresenter.RenderTransform>
                                <TranslateTransform X="1.0" Y="1.0" />
                            </ContentPresenter.RenderTransform>
                        </ContentPresenter>
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="content"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Beige" />
        </Trigger>
    </Style.Triggers>
</Style>

Update:如果您下定决心要应用Style在代码中,你不想使用ResourceDictionary(可能是更好的方法),您可以加载Style动态使用XamlReader.Load:

            const string xaml = @"
<Style xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
       xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
       TargetType='Button'>
    <Setter Property='Template'>
        <!--- Omitted For Clarity --->
    </Setter>
    <Style.Triggers>
        <Trigger Property='IsMouseOver' Value='True'>
            <Setter Property='Background' Value='Beige' />
        </Trigger>
    </Style.Triggers>
</Style>";
            var encoding = new ASCIIEncoding();
            var bytes = encoding.GetBytes(xaml);
            var style = (Style)XamlReader.Load(new MemoryStream(bytes));
            Button1.Style = style;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 样式按钮 MouseOver 问题 的相关文章

随机推荐

  • OnClickListener - 事件的 x,y 位置?

    我有一个从 View 派生的自定义视图 我希望在单击视图时收到通知 以及单击发生的 x y 位置 长按也是如此 看起来像这样做 我需要覆盖onTouchEvent 有没有办法从事件的 x y 位置OnClickListener相反 但是 如
  • map_partitions的返回值是多少?

    dask API 表示 map partition 可用于 在每个 DataFrame 分区上应用 Python 函数 根据此描述并根据 map 的通常行为 我期望 map partitions 的返回值是 类似于 一个长度等于分区数量的列
  • 找出最新术语和第二个最新术语之间的差异

    表的结构就像 create table events event type integer not null value integer not null time timestamp not null unique event type
  • Flutter 无法从剪贴板读取

    我来询问一个关于 Flutter 和 Future 的非常具体的问题 并等待机制 这似乎有效 但我的剪贴板在使用可编辑文本字段操作时并没有真正起作用 即使遵循 Google 关于实现的建议 这是我的粘贴代码 onPressed async
  • 如何在 IE(9+) 和 Safari (Pad) 中播放带有 HTML5 音频的 .m4a?

    我需要在 IE 9 和 Safari iPad iPhone 中播放 m4a 文件 在 iPhone 上录制 我在设置正确的 MIME 类型时遇到问题 为了在 IE10 中播放 我需要设置audio mp4但对于 Safariaudio a
  • 什么是正则表达式平衡组?

    我刚刚读到一个关于如何在双花括号内获取数据的问题 这个问题 然后有人提出了平衡组 我仍然不太确定它们是什么以及如何使用它们 我通读了平衡组定义 但解释很难理解 而且我对我提到的问题仍然很困惑 有人可以简单解释一下平衡组是什么以及它们有什么用
  • 在 Linux 上提取 TCP 往返时间 (RTT) 估计

    我有在 Ubuntu 上运行的 apache 服务器 客户端连接并下载图像 我需要提取底层 TCP 连接的 RTT 估计 有没有办法做到这一点 也许像在调试模式下运行我的 tcp 堆栈以让它在某处记录此信息之类的东西 请注意 我不想运行 t
  • 比较对象数组,与顺序无关

    我有 2 个对象数组 我必须比较它们 但是对象的顺序DOES NOT事情 我无法对它们进行排序 因为我没有它们的键名称 因为这些函数必须是通用的 我将获得的有关该数组的唯一信息是两个数组的对象具有相同数量的键 并且这些键具有相同的名称 因此
  • 即使模型值为空,TextBoxFor Helper 也会保留以前的值

    我有一个用于添加简单实体的 MVC 表单 我正在使用 TextBoxFor model gt model FieldName 创建输入字段 我有一个 保存 按钮和一个 保存并新建 按钮 保存和新建 按钮应该回发到 保存 操作 然后返回带有空
  • 如何获取通用扩展方法的MethodInfo?

    我有一个IEnumerable
  • 使用 PropertyInfo 找出属性类型

    我想动态解析对象树以进行一些自定义验证 验证本身并不重要 但我想更好地理解 PropertyInfo 类 我会做这样的事情 public bool ValidateData object data foreach PropertyInfo
  • MAC地址打印

    这是获取一些有关网络信息的代码 问题是当它打印 MAC 地址时 它会正常打印 有时与fff的 喜欢 00 21 84 a2 12 88 和 00 ffffff21 84 a2 12 ffffff88 因机器而异 这是代码 include
  • HttpWebRequest.EndGetResponse 在 Windows Phone 7 中引发 NotSupportedException

    在 Silverlight Windows Phone 7 项目中 我正在创建一个 HttpWebRequest 获取 RequestStream 向流中写入一些内容并尝试获取响应 但我总是收到 NotSupportedException
  • CGPathAddCurveToPoint 的参数是什么意思?

    我想建立一个CGPathRef以编程方式基于一天中不同时间点的太阳坐标 计算点数不是问题 但我想做一个CGPathRef那是顺利而有思想的CGPathAddCurveToPoint会是合适的 我了解路径 变换 x 和 y 参数 但我不确定其
  • python中按键减少

    我正在尝试思考在 python 中执行此操作的最有效方法 假设我有一个元组列表 dog 12 2 cat 15 1 dog 11 1 cat 15 2 dog 10 3 cat 16 3 假设我有一个函数 它接受其中两个元组并将它们组合起来
  • 为什么 DateTime.ToShortTimeString() 不尊重“区域和语言设置”中的短时间格式?

    我遇到了一个问题 可能是由于我对 DateTime ToShortTimeString 方法的工作原理的误解 当使用此函数格式化时间字符串时 我假设它会遵循 Windows 7 格式设置中的 短时间 设置 Control Panel gt
  • 在 Python 中以二进制格式写入和读取日期时间

    我想在 Python 中将日期时间列表存储在二进制文件中 编辑 二进制 是指每种数据类型的最佳数字表示 其用途是保存由 unix timestamp 纬度 经度 海拔 组成的GPS轨迹点 因此整个结构是little endian Long
  • 函数调用与局部变量

    我经常看到多次调用其他函数的函数 而不是存储一次函数的结果 i e 1 void ExampleFunction if TestFunction gt x TestFunction lt y TestFunction z a TestFun
  • 使用 R Shiny 框架的密码字段

    我打算为我的应用程序登录 为此我需要一个密码字段 我不知道闪亮是否用于此目的 但仍然可能吗 code for a simple text box is textInput id label value 但是有可能有密码字段吗 另外 与此同时
  • WPF 样式按钮 MouseOver 问题

    我正在尝试在按钮上制作一个简单的鼠标悬停效果 当鼠标悬停时它确实会改变颜色 但颜色会立即更改为默认按钮背景 我如何覆盖此行为 这是我的代码 Style myBtnStyle new Style Trigger bla new Trigger