【WPF】样式与模板:鼠标移入/悬浮时按钮的背景色不改变
情况:鼠标移到按钮上,默认情况是按钮背景色会改变的,网上也能搜到很多如何自定义改变的背景色。
需求:现在需求反过来,想要鼠标移到按钮上,保持按钮的背景色不改变。
一种思路:在样式文件中,使用MultiTrigger来定义按钮的【鼠标悬浮+不被选中/被选中】同时满足的状态时的背景色。
解决:自定义一个ToggleButton的样式文件。
MyToggleButton.xaml:
<ResourceDictionary x:Class="HomeDecorationPSD.Presentation.Style.MyToggleButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HomeDecorationPSD.Presentation.Style"
mc:Ignorable="d">
<Style x:Key="myToggleButton" TargetType="{x:Type ToggleButton}">
<Setter Property="Width" Value="60"/>
<Setter Property="Height" Value="20"/>
<!-- 替换掉默认的模板 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border CornerRadius="3" BorderThickness="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- 更改三态的背景颜色 -->
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" Value="#FFA1C3F3"/>
</Trigger>
<Trigger Property="IsChecked" Value="false">
<Setter Property="Background" Value="#FF14B3FD"/>
</Trigger>
<!-- 鼠标悬浮时,背景颜色不变 -->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Property="IsChecked" Value="true"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="#FFA1C3F3"/>
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Property="IsChecked" Value="false"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="#FF14B3FD"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
给ToggleButton使用这个样式:
<UserControl
x:Class="HomeDecorationPSD.Presentation.Views.SpaceView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:HomeDecorationPSD.Applications.ViewModels"
mc:Ignorable="d" MinWidth="300" MinHeight="500"
>
<!-- 引入样式文件 -->
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Presentation/Style/MyToggleButton.xaml" /><!-- 是工程的相对路径 -->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<DockPanel Margin="10" >
<StackPanel Orientation="Vertical">
<WrapPanel Orientation="Horizontal" Margin="5">
<ToggleButton Content="客餐厅" IsChecked="True" Style="{StaticResource myToggleButton}" Margin="5"/>
<ToggleButton Content="客厅" Style="{StaticResource myToggleButton}" Margin="5"/>
<ToggleButton Content="餐厅" Style="{StaticResource myToggleButton}" Margin="5"/>
<ToggleButton Content="卧室" Style="{StaticResource myToggleButton}" Margin="5"/>
<ToggleButton Content="测试" Style="{StaticResource myToggleButton}" Margin="5"/>
</WrapPanel>
</StackPanel>
</DockPanel>
</UserControl>
运行效果:
小结:
- 如果不给Style指定一个x:Key值,则所有的ToggleButton都会变成使用该样式。为了避免这种情况,使用x:Key值来指定用哪个样式,否则是默认样式。
关于WPF样式的学习参考这篇文章:http://www.cnblogs.com/zhouyinhui/archive/2007/03/27/690431.html - 为什么要用上Template模板,居然在某度知道看到答案:https://zhidao.baidu.com/question/2137628503185830468.html
2018.3.25更新:
参考这个办法:https://blog.csdn.net/qian_f/article/details/28886021
【WPF】样式与模板:鼠标移入/悬浮时按钮的背景色不改变的更多相关文章
- CSS3 - 鼠标移入移出时改变样式
1,使用伪类实现样式切换伪类是CSS2.1时出现的新特性,让许多原本需要JavaScript才能做出来的效果使用CSS就能实现.比如实现下面的鼠标悬停效果,只要为:hover伪类应用一组新样式即可.当 ...
- css实现鼠标移入table时出现滚动条且table内容不移位
一般是这样: 表格的标题和内容分别由一个table组成,其中表格内容的table由一个class="table-body"的div包裹.css如下 .tContainer .tab ...
- WPF样式、模板、装饰器学习
[代码]
- 利用Jquey.hover来实现 鼠标移入出现删除按钮,鼠标移出删除消失
Html代码 <div class="box"><div class="bmbox" onclick="$('.box:first' ...
- Expression Blend实例中文教程(12) - 样式和模板快速入门Style,Template
在上一篇,介绍了Visual State Manager视觉状态管理器,其中涉及到控件的样式(Style)和模板(Template),本篇将详细介绍样式(Style)和模板(Template)在Sil ...
- html中如何实现表格移入移出时背景颜色改变?(两种方法)
html中如何实现表格移入移出时背景颜色改变?(两种方法) 一.总结 1.通过css的table标签的hover属性: 10 #tab:hover{ 11 background: green 12 } ...
- 样式和模板快速入门Style,Template
http://www.cnblogs.com/jv9/archive/2010/04/14/1711520.html 样式(Style)和模板(Template)的定义 在Silverlight中,样 ...
- 转:zTree树控件key配置之title:zTree树节点名称过长如何省略显示且鼠标移入节点上能够显示全称
当树节点的名称有些很长时,全部显示出来显得很拥挤的情况下,我们会想到用省略节点名称来代替,当鼠标移入节点时能够显示该节点的全称.这样我们应该如何做呢? 首先,我们要在树的节点内多增加一个属性用于设置该 ...
- Qt 为QPushButton、QLabel添加鼠标移入移出事件
QT 为QPushButton.QLabel添加鼠标移入移出事件**要实现的效果:**鼠标移入QPushButton时与移出时按钮变换字体颜色,鼠标移入QLabel时显示上面的文字,移出时不显示.** ...
随机推荐
- 【laravel5.4】git上clone项目到本地,配置和运行 项目报错:../vendor/aotuload.php不存在
1.一般我们直接使用git clone 将git的项目克隆下来,在本地git库和云上git库建立关联关系 2.vendor[扩展]文件夹是不会上传的,那么下载下来直接运行项目,会报错: D:phpSt ...
- 【vue.js】windows下安装vue.js
windows下搭建vue开发环境 Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常 ...
- useradd或者userdel相关用户管理命令不好用
前言 有时使用useradd或者userdel会出现如下报错: userdel: cannot open /etc/passwd 很明显是/etc/passwd文件导致的 一.查看以及改变文件状态 [ ...
- subline上装node.js插件
此方法绝对可行,我已试过:http://www.mamicode.com/info-detail-84030.html
- Python基本数据类型详细介绍(转)
1.空(None)表示该值是一个空对象,空值是Python里一个特殊的值,用None表示.None不能理解为0,因为0是有意义的,而None是一个特殊的空值.2.布尔类型(Boolean)在 Pyth ...
- CentOS 6.7下配置 yum 安装 Nginx。
第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx]nam ...
- HTML中button和input button的区别
button和input button的区别 一句话概括主题:<button>具有<input type="button" ... >相同的作用但是在可操控 ...
- Jmeter----逻辑控制器(Logic Controller)
前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”.意 ...
- Linux内核同步 - RCU基础
一.前言 关于RCU的文档包括两份,一份讲基本的原理(也就是本文了),一份讲linux kernel中的实现.第二章描述了为何有RCU这种同步机制,特别是在cpu core数目不断递增的今天,一个性能 ...
- Linux时间子系统(十四) tick broadcast framework
一.前言 在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态.当然CPU的idle状 ...