理解样式

样式可以定义通用的格式化特征集合。


Style 类的属性

Setters、Triggers、Resources、BasedOn、TargetType

<Style x:Key="BitFontButtonStyle" TargetType="Button">
<setter Property="FontFamily" Value="Times New Roman"/>
</Style>

如果以上代码不使用x:Key ,那个TargetType属性还可以作为自动应用样式的快捷方式。

<!--删除自动应用的样式-->
<Buttn style="{x:Null}"/>

关联事件处理程序

<Style x:key="MouseOverHighLightStyle">
<EventSetter Event="TextBlock.MouseEnter" Handler="element_MouseEnter"/>
</Style>
private void element_MouseEnter(object sender,MouseEventArgs)
{
//业务代吗 事件处理程序
}

多层样式

*BaseOn *属性来设置样式的继承

<Style x:Key="NewButtonStyle" BaseOn="ButtonBaseStyle"/>

BaseOn可创建完整的样式继承链,最后设置的同一属性会覆盖基样式,样式继承的依赖会使程序变得脆弱,不建议使用样式继承。

触发器

可自动完成简单的样式改变,需要使用样板事件处理逻辑。通过 Style.Triggers集合链接到样式中,继承System.Windows.TriggerBase

TriggerBase的继承类

TriggerMultiTriggerDataTriggerMultiDataTriggerEventTrigger

通过FrameworkElement.Triggers集合可以直接为元素应用触发器。

简单触发器

<Style x:key="TextBoxStyle" >
<Style.Setters>
<Setter Property="Control.Background" Value="Red"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="Control.IsFocus" Value="True" >
<Setter Property="Control.Backgroud" Value="Yellow"/>
</Trigger>
<Trigger Property="Control.IsPressed" Value="True">
<Setter Property="Control.Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>

以上触犯器都触发了IsFocusedIsPressed属性,那么设置的背景颜色为Blue,这不在于那个属性先触发,而是取决于触发器在标记中的排列顺序。

<Style x:key="TextBoxStyle" >
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Control.IsFocused" Value="True"/>
<Condition Property="Control.IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Control.Background" Value="Pink"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>

多条件的情况项不用关系声明的顺序,在改变背景颜色之前需要条件都为真。

事件触发器

<Style x:Key="BigFontButton">
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryBoard>
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22"/>
</BeginStoryBoard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>

DoubleAnimationDouble类型动画类,位于System.Windows.Media.Aniamtion,Storyboard为故事版,为动画提供时间线,内部可以定义一个或多个动画。动画在一定时间类修改依赖项属性。

WPF样式和触发器的更多相关文章

  1. WPF样式与触发器(3)

    WPF中的各类控件元素, 都可以自由的设置其样式. 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Mar ...

  2. [No000012F]WPF(7/7) - 样式,触发器和动画

    WPF Tutorial : Beginning [^] WPF Tutorial : Layout-Panels-Containers & Layout Transformation [^] ...

  3. wpf中的触发器详解

    原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...

  4. WPF样式(Style)入门

    原文:WPF样式(Style)入门 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34802416/article/details/78231 ...

  5. wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)

    2010-03-24 16:19:07|  分类: WPF相关 |  标签: |字号大中小 订阅     wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2  简单 ...

  6. Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  7. 写自己的WPF样式 - 窗体

    初试WPF样式,感觉还不错.上篇写完了按钮的样式下面写窗体,废话不多说直接上代码: (1)定义一个窗体样式"MyWpfWindow" <Style x:Key="M ...

  8. C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  9. WPF样式——经典博客

    WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html

随机推荐

  1. 使用 JWT 来保护你的 SpringBoot 应用

    关键词 写在前面 Spring Boot 创建Spring Boot应用 创建一个Web 应用 使用JWT保护你的Spring Boot应用 添加Spring Security 本文代码 关键词 Sp ...

  2. select poll和epoll

    select poll epoll都是IO多路复用机制.这里的复用其实可以理解为复用的线程,即一个(或者较少的)线程完成多个IO的读写.这里总结下这三个函数的区别. 1 select 1.1 sele ...

  3. Effective Java —— 消除过期的对象引用

    本文参考 本篇文章参考自<Effective Java>第三版第七条"Eliminate obsolete object references" Memory leak ...

  4. ImportError: No module named 'Tkinter' [closed]

    跑maskrcnn报错:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot sh ...

  5. 顺利通过EMC实验(16)

  6. 转载:介绍AD另外一种奇葩的多通道复用的方法

    原文链接:http://www.eda365.com/forum.php?_dsign=74fe4957&mod=viewthread&page=1&tid=110710 在设 ...

  7. 什么是CSS Modules ?我们为什么需要他们

    原文地址:https://css-tricks.com/css-mo...最近我对CSS Modules比较好奇.如果你曾经听说过他们,那么这篇博客正适合你.我们将去探索它的目的和主旨.如果你同样很好 ...

  8. ES6-11学习笔记--类与继承

    ES5 中的类与继承: 类的定义: function People(name, age) { // this指向当前实例化对象 console.log(this); // 实例属性 this.name ...

  9. Leetcode541/151之String与char数组与StringBuffer

    String与char数组与StringBuffer 通常情况下遇到删除字符或者反转字符串时需要将String转为char数组或者StringBuffer String与char数组 char [] ...

  10. Mybatis注解开发(一对一)

    其他代码访问:Mybatis注解开发基础操作 1.添加OrderMapper接口 public interface OrderMapper { // @Select("select *,o. ...