如何在单击任何按钮时更改按钮的背景颜色?

2024-01-10

我有 3 个按钮。我创建了一个样式,用于所有三个按钮以显示 MouseOver 和 Pressed 状态。我需要有逻辑来指示选择/单击了哪个按钮。如果单击按钮,则背景颜色应保持/与按下状态相同,而其他两个按钮应重置为背景颜色以作为正常状态。下面是我的代码。我想知道是否可以在 XAML 中实现所有功能,或者如何在代码隐藏中实现?谢谢我提前。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="test3.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">

<Window.Resources>  
    <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="true" Background="#FFFFE640">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFC8B432"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Pressed">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFBCAA31"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,0,0,4" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsKeyboardFocused" Value="true">
                        </Trigger>
                        <Trigger Property="ToggleButton.IsChecked" Value="true">
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="#ADADAD"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Storyboard x:Key="OnMouseOneEnter">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
            <EasingColorKeyFrame KeyTime="0" Value="#FFDAC326"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="OnMouseOneLeave">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
            <EasingColorKeyFrame KeyTime="0" Value="#FFFFE640"/>
        </ColorAnimationUsingKeyFrames>
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_Two">
            <EasingColorKeyFrame KeyTime="0" Value="#FF85781C"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="OnMoseOneClick">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
            <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FFDAC326"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

<Grid>
    <StackPanel x:Name="LayoutRoot">
        <Button x:Name="button_One" HorizontalAlignment="Left" Width="90" Height="90"  Content="One" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
        <Button x:Name="button_Two" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
        <Button x:Name="button_Three" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
    </StackPanel>   
</Grid>

您可以将其更改为使用“IsFocused”属性,而不是“IsPressed”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在单击任何按钮时更改按钮的背景颜色? 的相关文章

  • 如何在 wpf C# 中播放双音频电影

    基本的 WPF 媒体元素仅播放 MKV 文件 但不查找和提供更改音频的设施 是否可以在 Media element 中播放此类视频 我在 stackoverflow 上搜索了很多问题 例如扩展媒体元素功能等或使用第三方组件 但没有找到任何合
  • WPF DataGrid 验证错误?

    这可能是预期的功能 但对我来说它确实像是一个错误 我正在使用开箱即用的 WPF DataGrid 绑定到 ObservableCollection 和尝试使用一些验证规则来提供良好的用户反馈 不用说 问题多得我数不过来 但我会坚持眼前的问题
  • WPF 中与 ControlPaint.Light 等效的是什么?

    与 ControlPaint Light 等效的 wpf 是什么 http msdn microsoft com en us library 3wz9t9fy 28VS 80 29 aspx http msdn microsoft com
  • WPF 动画:如何使其滑入?

    所以我刚刚进入动画领域 我想做一个 滑出 动画 我成功地做到了 但现在我希望它通过单击同一个按钮滑入 就像我单击它 它滑出 然后我希望当我再次单击它时它滑回 后面没有任何代码 所以只需通过 xaml 这是 XAML
  • 高级 XAML 动画效果。脉冲、行进的蚂蚁、旋转。警报

    我有一个警报列表 当警报被激活时 要求使其更加引人注目 当警报状态发生变化时 我想在该项目周围创建脉冲外发光几秒钟 然后让它消失 我遇到的问题是我似乎无法仅在需要时才出现 DropShadowEffect 我尝试将不透明度设置为 0 将颜色
  • WPF ICommand CanExecute():RaiseCanExecuteChanged() 或通过 DispatchTimer 自动处理?

    我正在尝试确定使 ICommands 的 CanExecute 反映在 UI 中的最佳方法 据我了解 调度员是处理 UI 绘图的 WPF 引擎 默认情况下 调度程序在实例化以及活动用户界面 单击 UI 或键盘输入 时评估 ICommands
  • 网格上的 SharedSizeScope 使表单“跳舞”

    我的页面上有一个 StackPanel 也尝试过使用 Grid
  • WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件

    我正在创建一个 32 位 WPF 应用程序 它需要在 WebBrowser 控件中显示创建的 PDF 在做的同时 WebBrowser Navigate new Url D TestPDF MyDocument pdf 它在 Adob e
  • WPF ValueConverter 错误处理的最佳实践是什么?

    应该实现两个功能 我想知道我需要对输入进行什么类型的验证以及如何管理错误 Public Function Convert ByVal value As Object ByVal targetType As System Type ByVal
  • 如何在c# wpf中获取元素的标签?

    我正在尝试使用 WPF 构建一个 GUI 在其中我可以绘制一些基本形状并将它们存储到 xml 文件中 形状是在 xaml 文件中设计的 我为每个形状添加了标签 现在我想在代码中获取它们的标签值 并将其作为属性存储在输出 xml 文件中 例如
  • 拖动用户控件,但将其保留在 WPF 中其父级的边界内

    我有一个用户控件 正在将其拖动到网格内 Z Index 设置得相当高 这样我就可以将其保持在其他孩子之上 拖动控件效果很好 但如果用户想要将控件移到网格之外 它会允许这样做 How do I keep it from leaving the
  • C#/WPF:禁用 RichTextBox 的文本换行

    有谁知道如何禁用文本换行RichTextBox 例如 如果我有一个大字符串不适合窗口 RichTextBox将字符串中无法显示的部分放在新行中 我想禁用它 并使其仅通过使用Scrollbar 多谢 Cheers A RichTextBox
  • 如何循环访问 WPF StackPanel 静态项目?

    可能很容易 但我很难弄清楚这一点 谷歌似乎也没有多大帮助 如何循环遍历 StackPanel 的静态声明元素 无数据绑定 元素在 xaml 中声明 任何帮助表示赞赏 你的意思是StackPanel的孩子们 foreach var child
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • 如何在MVVM中实现对话框架构

    我正在开发一个基于 PRISM 框架 Unity Container 的 WPF 4 0 MVVM 应用程序 我想知道在 mvvm 模式中实现对话框的最佳方法是什么 我计划在我的应用程序中使用相当多的东西 所以我想要一些可重用的东西 由于您
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可
  • WPF HierarchicalDataTemplate 不会在属性更改时更新 ItemsSource

    这是一些 XAML
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis

随机推荐

  • Node.js 堆栈错误超过 10 行?

    有没有办法让 Node js 堆栈错误超过 10 行 function a dieInHell function b a function c b function d c function e d function f e functio
  • 将代表向量添加到总行数不均匀的数据框中

    我正在尝试找到一种自动处理大型数据集以添加两个因素的方法 但数据可能包含不均匀的行 我尝试使用 rep 函数来执行此操作 但这仅在数据帧具有偶数时才有效 x lt c 1 3 5 7 9 y lt c 2 4 6 8 10 df lt da
  • 如何使用 cURL 执行 PUT 请求?

    如何使用 cURL 测试 RESTful PUT 或 DELETE 方法 使用巨大的 https en wikipedia org wiki Letter case Majuscule X使用您想要的任何 HTTP 动词进行标记 curl
  • 在 iText 中操作路径、颜色等

    我需要分析PDF文件的路径数据并使用iText 7操作内容 操作包括删除 替换和着色 我可以使用如下代码来分析图形 public class ContentParsing public static void main String arg
  • 正则表达式 unicode 和重音[重复]

    这个问题在这里已经有答案了 Why b b 不匹配 re sub r b b flags re UNICODE 正在给予 虽然我想要 Use W import re s final s re findall W s 0 Output
  • AWS Lambda:模块初始化错误:TypeError

    我正在尝试部署AWS lambda函数 并且我已经用express编写了代码 Code var express require express var bodyParser require body parser var lampress
  • C++ 对象数组的惰性分配

    如果我做类似的事情 void f const int n 1 lt lt 14 int foo new int n or void f const int n 1 lt lt 14 int foo new int n Linux内核会使用惰
  • 如何下载被cors屏蔽的图片

    当我从其他网站抓取包含图像的数据时 遇到以下错误 get https truyenvua com 128 1081 1 jpg gt hdfgdfg function data console log data 发生错误如下 请帮我解决问题
  • 使用应用程序时,Interface Builder 中 UIView 对象的大小会发生变化

    我有一个额外的 UIView 对象 我刚刚将其拖到情节提要上 它覆盖了整个 iPhone 屏幕 所以我点击它并拖动它 直到它只覆盖 iPhone 屏幕的一半 这是我的故事板在选择了额外的 UIView 对象后的样子 然而 当我在 iPhon
  • jquery 数据表服务器端 - 顶部过滤列

    您好 我需要将 JQUERY DATATABLES 1 10 10 上的过滤器列移到顶部 我的过滤器列位于底部 dtabledID thead th each function var title this text this html
  • 使图像的一部分可点击

    我以这种方式应用了背景图像 HTML div img src stock png class stretch alt image div CSS background width 100 height 100 position absolu
  • 具有 URL 重写模块的 IIS 7.5 在回发时将查询字符串参数加倍

    我在 Windows 7 RC 上使用 IIS 7 5 我使用 IIS Url Rewrite 模块来重写 URL 一切似乎都工作正常 直到我通过单击按钮执行回发 然后它将查询字符串参数附加到我重写的 URL 中 如下所示 重写的 URL
  • Node.js - 在加密模块中设置填充

    我一直在查看文档加密模块 http nodejs org api crypto html在 Node 中 我试图弄清楚如何在进行对称加密时设置填充 我正在尝试使用 AES 128 ECB 和 PKCS5 填充 我在任何地方都看不到它允许您指
  • 获取子节点包含属性的节点

    假设我有以下 XML
  • 在解决方案中实现业务规则引擎的方法或模式?

    我在一家年轻的银行公司工作 我们的解决方案 NET 有一个重要的技术债务 因此我们按照 DDD 原则对其进行重构 我们计划使用业务规则引擎 业务规则涉及会计目的 营销目的 风险目的 法律内容 我们计划对由企业赞助的 BRE 进行 POC 我
  • Chrome 开发者工具扩展控制台

    我将其包含在我的 chrome 扩展清单中 devtools page devtools html 在 devtools html 中 我包含一个 devtools js 文件 它创建一个面板 chrome devtools panels
  • Javamail,Transport.send() 非常慢

    我写了一个批量发送电子邮件的方法 但它非常非常慢 每 10 秒大约 3 封邮件 我想发送数千封邮件 有什么办法可以更快地做到这一点吗 我现在使用 gmail 但仅用于测试 最后我想使用我自己的 SMTP 服务器发送 这是代码 public
  • 表示对象中的优先级/偏好的最佳方式是什么?

    在域中建模优先级 偏好的最佳方法是什么 例如 假设我有一堂课Person代表一个人并有一些偏好 例如PersonX喜欢披萨 意大利面和煎蛋卷 实际上他更喜欢意大利面而不是披萨 如何对这些进行最佳建模 第一个想法就是把它们放在一个List 作
  • 在 R 中用十六进制值绘制颜色

    如何在 R 中生成 5x5 矩阵 每个单元格用调色板 例如 viridis 中的不同颜色着色 并且每个单元格显示颜色的十六进制值 谢谢您的帮助 您可以使用show col函数从scales package library viridis l
  • 如何在单击任何按钮时更改按钮的背景颜色?

    我有 3 个按钮 我创建了一个样式 用于所有三个按钮以显示 MouseOver 和 Pressed 状态 我需要有逻辑来指示选择 单击了哪个按钮 如果单击按钮 则背景颜色应保持 与按下状态相同 而其他两个按钮应重置为背景颜色以作为正常状态