WPF - 如何使用模板创建图像按钮

2024-04-29

我正在尝试创建一个包含 3 个图像的按钮:一个普通图像、一个按下图像和一个禁用图像(我将使用它们来创建向上/向下箭头按钮)。

我相信正确的方法是从Button并使用Template并设置触发器来更改图像。我有 3 个依赖属性,每个图像一个。

图像将为 .png 并具有透明背景(因为它们不是矩形)。

我正在寻找类似的东西CBitmapButton in MFC.


您不需要依赖属性,因为您继承自Button。您已经拥有了IsPressed and IsEnabled特性。事实上,这就是您所需要的:

<Button x:Class="TestWpfApplication.ThreeStateImageButton"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Button.Template>
      <ControlTemplate TargetType="{x:Type Button}">
         <Grid>
            <Image Name="Normal" Source="Resources/Normal.png"/>
            <Image Name="Pressed" Source="Resources/Pressed.png" Visibility="Hidden"/>
            <Image Name="Disabled" Source="Resources/Disabled.png" Visibility="Hidden"/>
         </Grid>
         <ControlTemplate.Triggers>
            <Trigger Property="IsPressed" Value="True">
               <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
               <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
               <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
               <Setter TargetName="Disabled" Property="Visibility" Value="Visible"/>
            </Trigger>
         </ControlTemplate.Triggers>
      </ControlTemplate>
   </Button.Template>
</Button>

使用您的 UserControl 代码隐藏文件:

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

WPF - 如何使用模板创建图像按钮 的相关文章

  • 当绑定值为 null 时出现 WPF 日期选择器验证错误

    我有一个 WPF 应用程序 其中使用绑定到实体框架 带有 SQL Server 实体的日期字段的日期选择器 我将其绑定如下
  • Tkinter:无法识别图像文件中的数据[重复]

    这个问题在这里已经有答案了 我有以下问题 我使用外部应用程序生成 GIF 文件 对我来说 GIF 看起来不错 我可以毫无问题地打开它们 然而 使用 photo PhotoImage file screenshot file self pre
  • 如何编写Template类的复制构造函数

    如何为模板类编写复制构造函数 因此 如果模板参数是另一个用户定义的类 它的复制构造函数也会被调用 下面是我的课 template
  • Android:自动从项目包中删除未使用的图像

    我正在开发一个相当大的android项目 并且在drawable文件夹中有很多图像 其中许多图像未在项目中使用 因为它们已被替换 并且占用了宝贵的空间 有什么方法可以自动找到这些图像并删除它们 而不是搜索项目中的每个图像 我使用过的一些工具
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 何时引发 Window.SourceInitialized 事件

    我能保证Window SourceInitialized事件总是会在Window Loaded事件 我需要HwndSource在我的中进一步处理的对象Window Loaded 事件处理程序我不确定到那时这是否总是可用 以下是您可以预期的事
  • JS - 如何将图像对象变成灰度并显示它

    基本上 当单击按钮时 它会告诉移动设备转到相机 一旦相机拍照 它就会给我图像数据 它被称为数据 URL 吗 这是我处理它的代码 var imagesrc data image jpeg base64 imageData var myimag
  • 如何使用javascript检查图像url是否为404

    使用案例 当 src 不为空并且 alt 标签不为空时 则显示 src 的图像 然后检查 src 图片 url 不是 404 当 src 为空且 alt 不为空时 显示名字的图像 当 src 和 alt 为空时显示默认图像 HTML img
  • 如何在java中通过socket发送Image数据类型

    我真的很困惑如何通过套接字发送图像数据类型 请帮我 我已经搜索了如何将 Image 数据类型转换为 char 但结果是 0 Use ImageIO http docs oracle com javase 1 4 2 docs api jav
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • 禁用触发 TextChanged 事件

    I have textbox我正在更改其中的文本lostFocus被解雇了 但这也激发了textChanged事件 我正在处理该事件 但我不希望在这种情况下触发它 我如何在这里禁用它 UPDATE 这个想法与bool很好 但我有几个文本框
  • 不同功能的容器?

    我正在尝试为不同的函数实现一个容器类 我可以在其中保存函数指针并稍后用它来调用这些函数 我会尝试更准确地描述我的问题 例如 我有两个不同的测试函数 int func1 int a int b printf func1 works i i n
  • 如何从 XAML 中为样式中的控件指定工具提示?

    我正在使用 Microsoft CodePlex 项目中的 WPF 数据网格 我有一个自定义控件 我想将其数据绑定到数据网格行中的字段 我一生都无法弄清楚如何在数据网格行上指定工具提示 我最接近的是使用 RowStyle 和 Setter
  • 如何在WPF中使用一次性视图模型?

    如果视图模型引用非托管资源或具有事件处理程序 例如调度程序计时器上的处理已过去 如何确保视图模型得到正确处理 在第一种情况下 终结器是一种选择 虽然并不理想 但在后者中 它永远不会被调用 我们如何判断何时不再有视图附加到视图模型 我通过执行
  • C++ 中何时需要或需要“显式专业化”?

    我正在阅读 C 入门 gt 函数冒险 gt 模板 gt 显式专业化 为了说明显式专业化的原因 用途 举例说明了一个案例 考虑一个可以交换任何类型的交换模板函数 int double struct etc 但有一个具体的struct job您
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 与 wpf ComboBox DisplayMemberPath、SelectedValue 和 SelectedValuePath 混淆

    我一直在努力解决这些组合框属性 显示成员路径 选定值 选定的值路径 我正在构建一个主详细信息表单 组合框中充满了客户 用户在组合中选择客户 所有文本框 EG 均正确填写 我遇到的问题是我已经让它工作了 但我不理解这些属性和差异 有没有一个很
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste

随机推荐

  • PHPSpreadsheet 文本旋转到 90 不起作用

    我正在尝试使用文本旋转到 90 度来使单元格具有垂直文本 但它不起作用 所有文本都是水平显示的 也许我做错了什么 这是我的 php 代码 spreadsheet new Spreadsheet Create a new worksheet
  • 如何在 postgresql 8.3 中知道时间戳的时区

    我正在使用 postgresql 8 3 我想知道特定时间戳 表中的列 的时区 在文档中我找到了关键字 时区 http www postgresql org docs 8 3 static functions datetime html 但
  • 为什么 JPA/hibernate 不能映射到 MySQL blob 类型?

    我收到以下错误 Caused by org hibernate HibernateException Wrong column type in TestTable for column PAYLOAD Found blob expected
  • CKEditor 3.x - 动态添加 UI 元素到插件对话框

    我正在构建一个 CKEditor 3 x 插件 它允许通过与我们的后端系统绑定的单独查看器应用程序有条件地显示 HTML 的某些部分 我的 CKEditor 插件将用于定义这些条件 但我对如何动态地将 UI 元素添加到插件对话框感到困惑 在
  • Grails Log4J 未登录生产环境

    我有一个 Grails 1 3 7 应用程序 并尝试在配置中设置 log4j 以用于生产 log4j 设置在开发中很好 但我无法在生产中显示任何内容 我正在尝试制作一个滚动文件等 但我无法显示任何内容 我什至在 信息 级别进行了配置 这样我
  • 不显眼的 Javascript 混淆了事件处理

    你知道我最喜欢引人注目的 javascript 的什么吗 当你触发一个事件时 你总是知道它会做什么 a a 现在每个人都在喝这种不引人注目的酷爱饮料 这一点就不那么明显了 对绑定事件的调用可以发生在页面中包含的任意数量的 javascrip
  • 解码子级时访问嵌套 Codable 结构中父级结构的属性

    在嵌套中使用解码器时Codablestruct 有什么方法可以访问父结构的属性吗 我能想到的唯一可行的方法 尚未测试 是在父结构中也使用手动解码器 在userInfo字典 然后访问userInfo在子结构中 但这会产生大量样板代码 我希望有
  • 将 YYYYMMDD 字符串转换为 Snowflake 中的 YYYY-MM-DD 日期格式

    基于雪花中提到的示例文档 https docs snowflake com en sql reference functions to date html 为什么仅通过更改 ORDER BY 子句 日期和时间戳值就会返回不同的值 另外 我正
  • 这个简单的洗牌算法是否会返回一副随机洗牌的扑克牌? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您有一个包含 52 张卡片的列表 其中列表中卡片的位置不会移动 您有第二个卡位置列表 首先 位置列表与第一个列表相同 迭代第一个列表 对于第一个列表中
  • 开始调试和附加到进程有什么区别

    当我将项目附加到我的 w3wp exe IIS 工作进程时 我的项目加载速度明显快于 开始调试 时的加载速度 但是 无论我 开始调试 还是 附加到进程 同一个工作进程似乎都在处理相同数量的模块 DLL w3wp exe 为什么附加到进程的速
  • onclick 和 href="javascript:函数名 之间有什么区别?

    有什么区别吗 1 a href Link1 a and 2 a href Link2 a 会以某种方式影响页面性能吗 如果您的元素实际上不应该将用户链接到某个地方 不要将其设为锚元素 如果您正在使用 a 标签只是为了改变下划线 光标 不要
  • Zookeeper 容错到底意味着什么?同时还是累计?

    正如 ZooKeeper 入门指南 中提到的 容错集群设置至少需要三台服务器 并且强烈建议您拥有奇数数量的服务器 所以如果我有 5 个服务器 如上所述 当其中 2 个服务器失败时我仍然可以生存 但这意味着同时或累积 那么这个怎么样 5 台服
  • pthread_create 编译返回错误

    我使用以下代码创建两个线程 header files include
  • create-react-app 中的 public/manifest.json 文件是什么?

    我知道 chrome 扩展使用 manifest json 但在这里 它也被用作其他东西 内容 short name React App name Create React App Sample icons src favicon ico
  • 如何使用必须包含空格的 title~= 进行 CSS 属性选择器? [复制]

    这个问题在这里已经有答案了 我有以下选择器 post link title Corporate 现在 我需要只选择标题仅在开头而不是标题中其他位置包含 Corporate 一词的元素 所以我有两个选择 1 创建一个仅检查标题开头的选择器 然
  • 如何在Windows平台上编写Git Server Hooks?

    我找不到任何适用于 Windows 的 Git 挂钩的明确示例 我在 Windows Server 上使用 Bonobo Git Server 我需要预提交和提交后挂钩作为 cmd 或 bat 预提交应检查空注释 提交后应发送有关提交的电子
  • Spring MVC - 从 JSP 提交对象

    我有一个显示客户列表的 JSP ArrayList searchResults 我希望能够选择其中之一 并将其 提交给 Spring MVC 控制器 但是 我似乎无法传递所选对象 只能传递它的属性 例如 customerId 我真的需要传递
  • 英特尔编译器使用错误的标头

    我试图找出为什么Intel Compiler 18 0 已安装after我的 Visual Studio 2017 安装使用的头文件MSVC 而不是它自己的 因为它会导致错误 一个简单的 include
  • Android SDK 构建工具、平台工具和工具是什么?应该使用哪个版本?

    我知道这是一个非常基本的问题 但令我惊讶的是 我找不到任何有关 Android SDK Build tools 的文档 除了 Android SDK 工具和 Android SDK 平台工具之外 还有一堆 Android SDK 构建工具
  • WPF - 如何使用模板创建图像按钮

    我正在尝试创建一个包含 3 个图像的按钮 一个普通图像 一个按下图像和一个禁用图像 我将使用它们来创建向上 向下箭头按钮 我相信正确的方法是从Button并使用Template并设置触发器来更改图像 我有 3 个依赖属性 每个图像一个 图像