【亚洲必赢官网】WPF样式和作为,WPF专业编制程序指南

Wtf(一时命名,随便起的 =
_=),模仿WPF的框架,还未有完善,唯有大致的底子成分,援助数据绑定。即使支持mono不过mono有bug

先创立①套样式描述细节,然后仅靠设置Style属性应用样式。

      
前边一言以蔽之到了wpf中三种体制的用法,wpf有着周边web中的CSS一样,为界面上的因素定制外观,以提供越来越好的用户界面,那种灵活性也是winForm所无法及的,从近日讲到的能够通晓在WPF应用程序中,通过控件的习性,大家也能够达成转移控件的外观。然则,这种措施局限性大、不灵活且不方便人民群众爱慕,比如1个,一个按钮的体裁能够那样,要是有二十,二十六个,甚至越多,难道也这么吗,鲜明那不是很好的选料,假若大家将上述控件的天性总结起来,写到一段样式中,为按钮钦定该样式(甚至用元素类型样式时,都不要求钦定按钮样式),全部按钮就持有合并样式和外观了。假使想修改按钮外观,大家只供给改一下样式代码即可,全数按钮外观都会随之转移。

WPF专业编制程序指南 亚洲必赢官网 1

写这几个只是兴趣爱好,感觉也没多疏忽义了,假使那个UI框架完善了,有微微人甘愿用?终归Windows上有WPF,而且C#跨平台要求也不多啊。小编对WPF也不算领悟,要健全的话,还有不少要写。一大堆常用控件和设计器。然而小编毫无XML来描述,而是一贯用C#来定义,设计器直接生成C#代码,因为作者觉着,固然有强大的设计器,写XML就是剩下的,而且解析XML还影响属性,对于WPF,笔者觉得Xaml太啰嗦了。

作为封装壹些为主的UI作用,然后用壹两行标记附加到成分上,完成效益。

体制的利用有各个格局,如内联样式(定义在要素内部)、已命名样式(为样式命名,使用时经过名称引用)、成分类型样式(为1类别型的成分,钦定一种体制)等等。

定价 : ¥68.00

 

体制基础

体制是一种首要的财富。

体制是属性值的集结,能被利用到2个成分。就如CSS,WPF样式允许你定义格式化特性并且遍及应用程序地运用它们去保障1致性。就如CSS,WPF样式可以级联通过元素树自动地行使到钦命的因素类型的对象。而且,WPF样式更加强力,因为她俩得以设置任何借助属性。那表示你能够使用它们标准化格式化以外的特点,诸如控制控件的一颦一笑性质。WPF样式也辅助触发器,那允许你当另二个性能被转移时改变控件的体裁,并且他们可以运用模板去重定义控件的内建国门外观。

属性值继承,是借助属性的风味之壹。当您在窗口水平设置属性时,窗口内部有着的元素将获得同等的值,除非显式地遮盖他们。

思虑上边代码:

<Window.Resources>
  <Style x:Key="BigFontButtonStyle">
    <Setter Property="Control.FontFamily" Value="Times New Roman" />
    <Setter Property="Control.FontSize" Value="18" />
    <Setter Property="Control.FontWeight" Value="Bold" />
  </Style>    
</Window.Resources>

那段标记创立单个财富:五个System.Windows.Style对象。样式对象具备几个设置器集合,带有三设置器对象,各类设置器设置一特质量。各种设置器对象提议要设置属性的名字。和该属性的值。就像全部的能源,样式对象有多少个用于检索财富的严重性字。在本例中,关键字是BigFontButtonStyle。(依据预约,样式关键字的尾声是Style。)

种种WPF元素只可以利用一个样式(或可以不选用样式)。3个成分通过Style属性应用样式。例如,为布局一个按钮使用你从前创办的样式,按钮像这么应用样式能源:

<Button Padding="5" Margin="5" Name="cmd"
 Style="{StaticResource BigFontButtonStyle}"> 
  A Customized Button
</Button>

本来,能够选用代码钦赐样式。方法是用FindResource()方法:

cmd.Style = (Style)cmd.FindResource("BigFontButtonStyle");

Style类一共有多少个关键的习性:

属性 描述
Setters Setter或EventSetter对象的集合。用于自动地设置属性值和附着事件处理器。
Triggers TriggerBase对象的集合,并且允许你自动地改变样式设置。例如,当另一个属性改变时或当一个事件发生时,你能修改一个样式。
Resources 你希望用于样式的资源集合。例如,有时需要用一个对象设置多个属性。在那种情况下,更有效的是创造对象作为一个资源,然后在你的设置器对象中使用那资源,而不是在每个设置器中,使用嵌套标签创造对象。
BasedOn 一个属性,允许你创造一个更特殊的样式。此样式继承(和可选地覆盖)另一个样式的设置。
TargetType 一个属性,识别样式所作用于的元素类型。此属性允许你创造仅影响某些元素的设置器,它允许你创造对于匹配的元素类型自动生效的设置器。

1、内联样式

会员价

¥51.00(75折)

WtfObject 
相当于WPF里的DependencyObject重视对象。继承该类的指标,全部属性暗中同意都是依靠属性

创造一个样式对象

你能创设各样程度的财富聚合,窗口的,容器的,大概应用程序的。

事实上,你能够间接设置控件的样式:

<Button>
  <Button.Style>
    <Style>
      <Setter Property="Control.FontFamily" Value="Times New Roman" />
      <Setter Property="Control.FontSize" Value="18" />
      <Setter Property="Control.FontWeight" Value="Bold" />
    </Style>
  </Button.Style>
  <Button.Content>A Customized Button</Button.Content>
</Button>

例如上面的为textBox加样式

学校减价价 :¥5一(75折)
本书样章免费试读:

天性写法:

设置属性

如你所见,各种Style对象包裹三个Setter对象的汇集。每种Setter对象设置二个因素的多个属性。唯1限制是二个设置器只好变越多个凭借属性—无法修改其余属性。

在部分状态下,你无法使用三个简约的字符串设置属性值。例如,不能够应用叁个简短字符串成立2个ImageBrush对象。在那种景色下,你能用3个嵌套成分设置属性。那是三个例子:

<Style x:Key="HappyTiledElementStyle">
  <Setter Property="Control.Background">
    <Setter.Value>
      <ImageBrush TileMode="Tile"
        ViewportUnits="Absolute" Viewport="0 0 32 32"
        ImageSource="happyface.jpg" Opacity="0.3">
      </ImageBrush>
    </Setter.Value>
  </Setter>
</Style>

 

为识别你期望设置的质量,你要求提供八个类和2个属性的名字。不过,类名字不需即使概念属性的类。它也能是此类的贰个派生类。例如,记挂上边BigFontButton样式的本子,Button类的引用代替Control类的引用:

<Style x:Key="BigFontButtonStyle">
  <Setter Property="Button.FontFamily" Value="Times New Roman" />
  <Setter Property="Button.FontSize" Value="18" />
  <Setter Property="Button.FontWeight" Value="Bold" />
</Style>

分别是派生类缩短了体制应用的范围。例如,那一个样式可以影响Button控件,可是不能影响Label控件。对于使用Control类的前方的事例,那么些样式即可以影响Button控件,也得以影响Label控件。

WPF忽略不可能被应用的性质。

假定体制中的全体属性都施用到同连串的要素,能够设置TargetType属性,提议属性应用的类:

<Style x:Key="BigFontButtonStyle" TargetType="Button">
  <Setter Property="FontFamily" Value="Times New Roman" />
  <Setter Property="FontSize" Value="18" />
  <Setter Property="FontWeight" Value="Bold" />
</Style>

能够瞥见,全数设置器的Property属性内并未有指明类名。

<TextBox Text="内容">
            <TextBox.Style>
                <Style>
                    <Setter Property="TextBox.FontSize" Value="16"></Setter>
                    <Setter Property="TextBox.Width" Value="80"></Setter>
                    <Setter Property="TextBox.Height" Value="40"></Setter>

                </Style>
            </TextBox.Style>
        </TextBox>

作者: 李应保    [作译者介绍]
出版社:电子工业出版社
ISBN:9787121100116
上架时间:20十-一-捌
出版日期:2010 年1一月
开本:16开
页码:525
版次:1-1

 

叠加事件处理器

<Style x:Key="MouseOverHighlightStyle">
  <EventSetter Event="TextBlock.MouseEnter" Handler="element_MouseEnter" />
  <EventSetter Event="TextBlock.MouseLeave" Handler="element_MouseLeave" />
  <Setter Property="TextBlock.Padding" Value="5"/>
</Style>

亚洲必赢官网,体制能够向来嵌套Setter成分和伊芙ntSetter成分。

那是事件处理的代码:

private void element_MouseEnter(object sender, MouseEventArgs e)
{
    ((TextBlock)sender).Background =
      new SolidColorBrush(Colors.LightGoldenrodYellow);
}

private void element_MouseLeave(object sender, MouseEventArgs e)
{
    ((TextBlock)sender).Background = null;
}

鼠标进入和鼠标离开都是一向事件路由。

行使样式:

<TextBlock Style="{StaticResource MouseOverHighlightStyle}">
 Hover over me.
</TextBlock>

本条功效也能够用事件触发器达成。

对于冒泡事件,最佳直接在容器成分中连连事件处理函数。

实属,大家能够通过在要素内部通过开始展览属性Style来定义样式。不过缺点也是显明的,假若有五个如此的控件指向同2个体裁,该怎么做吧,只好各种都要写,所以很不好,所以我们能够在财富中定义1个体制,然后让多少个控件调用那几个体裁即可

【编辑推荐】
完善系统,深切应用
通俗易懂,实例丰盛

        /// <summary>
        /// 绑定的数据上下文
        /// </summary>
        [UIPropertyMetadata(null, true)]
        public virtual object DataContext
        {
            get { return GetValue<object>(); }
            set { SetValue(value); }
        }

多层样式

使用属性值继承特征的习性包括IsEnabled,IsVisible,Foreground,以及具有字体属性。

听大人讲在此之前的体制建立一个新样式,使用BasedOn属性:

<Window.Resources>
  <Style x:Key="BigFontButtonStyle">
    <Setter Property="Control.FontFamily" Value="Times New Roman" />
    <Setter Property="Control.FontSize" Value="18" />
    <Setter Property="Control.FontWeight" Value="Bold" />
  </Style>

  <Style x:Key="EmphasizedBigFontButtonStyle"
    BasedOn="{StaticResource BigFontButtonStyle}">
    <Setter Property="Control.Foreground" Value="White" />
    <Setter Property="Control.Background" Value="DarkBlue" />
  </Style>
</Window.Resources>

 

唯有四个样式有语义上的交流,不然不要使用BasedOn属性使他们相关联。

贰、已命名样式

【内容简介】
《WPF专业编制程序指南》是1本WPF编制程序的标准参考书,全书通过大批量的实例深远阐释了WPF中的传递事件、传递命令、相关属性、附加属性、逻辑树和视觉树等基本概念;介绍了各样画笔、画刷的运用办法;
深刻座谈了WPF中的各个控件以及这么些控件在窗口或页面上的排版,并跟着演讲了控件的作风和模板及数量绑定等唇齿相依技术。
本书对WPF中的图形系统及图片和排版的更换原理也展开了深入的探赜索隐,并在此基础上谈论了WPF中的动画技术。多媒体不是WPF专有的技巧,但本书介绍了在WPF中选取多媒体的实用技术。用户控件和自定义控件是WPF中相比较深远的情节,本书最终两章对这一课题展开了深层次的商讨,通过对Ribbon控件的支付,不仅能够通晓开发用户控件和自定义控件的诀要,而且能够体会WPF项目标团队及三种WPF技术细节的归纳应用。
本书可供.NET
桌面及网络应用程序的开发职员、项目管理人士或准备进入那壹天地的连锁工程技术职员,以及大学本科或专中国科学技术大学学与高校相关标准的师生参考学习。

 

机动应用样式到花色

体制财富得以自行应用到钦定项目标因素。只供给安装TargetType属性钦命指标项目,并且完全省略关键字。那时,实际上隐式使用了项目的记扩充:

x:Key="{x:Type Button}"

那是半自动应用按钮样式的例证:

<Window.Resources>
  <Style TargetType="Button">
    <Setter Property="FontFamily" Value="Times New Roman" />
    <Setter Property="FontSize" Value="18" />
    <Setter Property="FontWeight" Value="Bold" />
  </Style>
</Window.Resources>

<StackPanel Margin="5">
  <Button Padding="5" Margin="5">Customized Button</Button>
  <TextBlock Margin="5">Normal Content.</TextBlock>
  <Button Padding="5" Margin="5" Style="{x:Null}">A Normal Button</Button>
  <TextBlock Margin="5">More normal Content.</TextBlock>
  <Button Padding="5" Margin="5">Another Customized Button</Button>
</StackPanel>

高级中学级的按钮显式删除了体制。不用提供新样式,只需求安装Style属性为空。

 将同样的内敛样式归咎起来,放入能源中,构成一个样式,并为它起2个名字。那样,就能够透过名称叫成分钦定该样式。

目录

率先篇 WPF编制程序基础
第二章 WPF应用程序 二
1.一 WPF应用程序的创始 二
1.2 Dos窗口 3
一.三 WPF应用程序的运维和终止 四
一.四 输入参数 5
1.5 在Xaml中创建Application 7
一.陆 窗口大小 10
一.七 网络应用程序 拾
一.八 应用程序的分外处理 1一
1.玖 应用程序中的能源 12
一.10 应用程序的公布 一三
1.11 WPF开发环境 1四
①.12 本章小结 15
第2章 XAML语言 16
2.壹 XAML是一种界面描述语言 1陆
2.二 XAML的根成分 17
二.叁 XAML命名空间(NameSpace) 一柒
二.四 XAML和代码分离技术(code behind) 1捌
2.5 子元素 19

【亚洲必赢官网】WPF样式和作为,WPF专业编制程序指南。.贰.陆 相关属性(Dependency Property) 20
二.7 附加属性(Attached Property) 二一
二.八 XAML标记扩充 二1
二.8.一 静态能源扩张(StaticResourceExtension) 2二
二.八.二 动态能源扩大(DynamicResourceExtension) 2三
2.八.三 数据绑定扩充(Binding) 二肆
二.八.4 相对数据源扩充(RelativeSource) 二四
二.捌.5 模板绑定(TemplateBinding) 25
2.8.6 x:Type扩展 26
2.8.7 x:Static扩展 26
2.8.8 x:null扩展 26
2.8.9 x:Array扩展 26
二.玖 本章小结 二七
第3章 WPF排版 28
三.一 排版基础 28
三.二 堆积面板(StackPanel) 2玖
3.3 WrapPanel 34
叁.4 停靠面板(DockPanel) 35
③.五 表格式面板(Grid) 3玖
三.5.一 设定UI成分在Grid中的地点 40
3.伍.二 设定Grid行或列的尺寸 40
三.5.三 成分横跨多少个体系时的设定 肆1
3.伍.4 在Grid中保障多行或多列大小的1致性 4肆
3.6 UniformGrid 46
三.7 画布面板(Canvas) 肆七
3.八 本章小结 48
第4章 WPF中的属性系统 4玖
4.1 CLR属性 49
肆.二 相关属性的概念 50
四.2.壹 相关属性的传递 50
四.2.2 WPF对相关属性的支撑 5一
4.三 自定义相关属性 52
四.肆 附加属性 5八
四.五 本章小结 六7
第伍章 画笔和画刷 6捌
五.壹 WPF中的颜色 6八
5.2 画刷 75
5.二.一 实心画刷(SolidColorBrush) 7六
5.二.贰 梯度画刷(GradientBrush) 7七
5.二.叁 线性梯度画刷(LinearGradientBrush) 7七
五.2.四 圆形梯度画刷(RadialGradientBrush) 80
伍.二.5 自制画刷(DrawingBrush) 8一
伍.贰.陆 粘贴情势(TileMode) 8贰
5.二.柒 伸展方式(Stretch) 八三
伍.二.八 图像画刷(ImageBrush) 8三
伍.二.九 控件画刷(VisualBrush) 8伍
5.3 画笔 88
伍.四 本章小结 九5

其次篇 WPF专业程序员必备
第6章 WPF控制 98
6.一 WPF控件概述 玖8
陆.贰 内容控件(Content Control) 100
陆.二.一 框架控件(Frame) 100
6.2.2 WPF按钮(Button) 101
陆.2.3 拨动按钮(ToggleButton) 拾四
6.2.4 CheckBox控件 104
6.2.5 RadioButton控件 104
6.二.六 重复按钮(RepeatButton) 拾5
陆.2.7 带有标题栏的情节控件(HeaderedContentControl) 十6
6.2.8 分组框(GroupBox) 107
陆.二.玖 伸展控件(Expander) 10九
6.2.拾 标签控件(Label) 110
陆.二.11 为按钮设置热键 11一
6.2.12 ToolTip 113
6.2.13 ScrollViewer 115
6.三 条目控件(Items Controls) 11陆
6.3.1 菜单(Menu) 117
6.3.2 工具条(ToolBar) 123
6.3.3 Selector 126
6.3.4 组合框(ComboBox) 126
6.3.5 TabControl 129
6.3.6 列表框(ListBox) 132
6.3.7 ListView 135
6.3.8 状态条(StatusBar) 138
陆.三.9 树形控件TreeView和TreeViewItem 140
陆.肆 文本控件(Text Controls) 1四三
六.四.1 口令输入框(PasswordBox) 1四三
6.四.二 文字输入框(TextBox) 144
6.4.3 RichTextBox 145
陆.伍 范围控件(Range Controls) 1四陆
6.5.1 滚动条(ScrollBar) 146
6.5.2 滑动条(Slider) 147
6.5.3 进展条(ProgressBar) 152
6.6 本章小结 15二
第八章 传递事件和传递命令系统 153
七.一 WPF中的成分树 153
7.2 传递事件(Routed 伊夫nt) 1六伍
7.2.1 RoutedEventArgs 166
七.二.二 终止事件传播 16陆
七.贰.3 处理传递事件 1陆7
柒.2.肆 附加传递事件(Attached Routed 伊芙nt ) 16八
七.三 调查传递事件 168
柒.三.一 键盘事件的产生和传递 17四
七.肆 自定义传递事件 174
七.⑤ 管理键盘和鼠标输入事件 1八2
7.5.一 键盘输入 1八二
七.伍.贰 鼠标输入 1八2
七.陆 传递命令 184
7.6.1 ICommand接口 186
7.6.2 ICommandSource接口 186
7.6.3 CommandTarget 186
7.陆.四 命令绑定(CommandBinding) 1八陆
7.陆.5 传递命令(Routed Command) 1捌柒
柒.陆.陆 WPF命令仓库(Command Repository) 187
七.7 本章小结 190
第8章 资源 191
八.1 能源定义及其类型 19壹
八.二 统1财富标识(Unified Resource Identifier) 192
8.3 .NET开发平台对财富国际化的支撑 19六
八.三.一 WinForm下的能源管理 1玖七
捌.三.二 用XAML创造本地能源 200
捌.四 WPF成分中定义的财富 20二
捌.肆.一 静态能源(StaticResource) 20三
八.四.2 能源的效率范围 20四
8.肆.三 静态扩充标识(Static markup extension) 20伍
八.四.4 动态财富扩张标识(DynamicResource 马克up Extension) 20八
8.五 本章小结 2十
第9章 风格 211
9.1 Style类 211
9.2 Setters 211
9.3 TargetType 215
9.4 BasedOn 218
9.5 触发器(Triggers) 220
九.5.壹 使用单一条件的触发器 2二1
九.5.二 使用七个原则的触发器 22二
九.伍.3 使用数据触发器(DataTrigger) 2二三
九.陆 风格中的财富 2二5
9.7 IsSealed 227
玖.⑧ 把作风定格定义在单独的文书中 227
九.玖 在FrameworkContentElement中采用风格 22八
9.10 再谈Setter属性 229
九.1一 本章小结 230
第10章 模板 231
十.一 模板概述 231
十.贰 控件模板 23贰
拾.贰.一 在控件中选拔模板 23二
拾.贰.2 在财富中应用模板 234
10.2.三 在控件模板中运用TargetType 235
10.贰.四 在模板中显示控件的始末 23陆
拾.贰.5 在模板中应用ContentPresenter 237
10.2.陆 模板桐月素名Name属性 239
拾.二.7 在模板中绑定控件的别样属性 23九
十.二.八 使用模板显示电力系统的断路器和刀闸开关 240
拾.二.九 在风格中利用模板 24二
10.二.10 获取WPF控件的模版 二4叁
10.叁 数据模板(DataTemplate) 24肆
10.3.一 大家所面临的题材 24四
十.三.二 定义数据模板 贰47
10.三.三 在财富中动用数据模板 24八
拾.三.四 数据模板触发器 24玖
十.三.伍 依据数量属性选拔相应的沙盘 250
拾.三.陆 在数额模板中行使类型转换技术 25三
10.4 ItemsPanelTemplate 258
10.五 层次结构数据模板(HierarchicalDataTemplate) 25玖
10.6 本章小结 26二
第一一章 数据绑定(Data Binding) 二陆三
11.壹 数据绑定概述 二六叁
11.二 最简易的数量绑定——从界面元素到界面成分 264
11.二.一 一对壹数据绑定 26四
11.2.2 在C#中,达成多少绑定 265
1一.2.三 对不是FrameworkElement和FrameworkContentElement成分落成多少绑定
26陆
1一.三 使用不一样的绑定形式 26陆
1壹.四 动态绑定 二陆柒
1一.5 最简单易行的数目绑定——从.NET对象到界面成分 26八
11.6 DataContext 271
1一.柒 控制绑定时刻 272
1一.八 开发协调的IValueConverter 27三
1一.玖 在数量绑定中进入校验 275
1壹.九.1 开发工作规则类 276
1一.9.二 在绑定中添加任意多少个事情规则 279
1一.玖.3 在控件上显得校验消息 27玖
1一.九.四 触发错误处总管件 280
1一.玖.5 清除控件上的错误消息 2八二
1一.10 对聚集对象的绑定 2八三
11.10.1 使用DisplayMemberPath属性 286
1一.10.二 显示当前条目 28六
1一.10.三 遍历集合中的记录 28八
1一.十.四 扩大或删除记录 290
11.10.5 对聚集对象分组 2玖3
11.10.6 对聚集对象排序 2玖四
1一.十.7 对聚集对象过滤 2玖伍
11.11 数据源 296
11.11.1 XML数据源 296
1一.1一.二 .NET对象数据源 30一
11.12 层次结构数据的绑定 30三
1一.一三 本章小结 30三
第三二章 窗口对话框和打字与印刷 30四
12.1 窗口(Window) 304
12.1.一 窗口的情事变化和事件 30四
1二.1.二 显明视窗的岗位 30九
1二.1.三 显明视窗的分寸 310
1二.一.四 视窗状态属性(WindowState) 310
1贰.1.五 视窗大小情势(ResizeMode) 3十
1二.一.六 视窗风格(WindowStyle) 311
12.2 网页(Page) 311
1二.二.1 成立网页 31二
12.2.2 KeepAlive属性 312
12.2.3 NavigationService属性 312
12.2.4 ShowsNavigationUI属性 313
1二.叁 浏览窗口(NavigationWindow) 313
12.叁.一 使用统壹风格 314
12.3.2 设置NavigationWindow的标题 314
12.三.3 浏览网页 3壹5
12.3.4 使用HyperLink类 315
1二.三.五 使用NavigationService转到差异的网页 31八
12.叁.6 使用浏览日志转换成分裂的网页 31⑨
1二.3.7 浏览窗口的浏览事件 31玖
12.4 对话框(DialogBox) 320
12.4.1 消息框(MessageBox) 320
1二.4.二 通用对话框 320
1二.四.3 自定义对话框 32二
1二.5 打字与印刷输出 32三
1贰.伍.一 XPS 文书档案简介 32叁
12.5.2 创建XPS文档 324
12.5.3 显示XPS文档 328
12.5.4 打印 333
1二.六 本章小结 33三

其3篇 图形和卡通
第二三章 贰维图形 33陆
一3.壹 WPF图形系统概述 336
①3.一.一 统一编制程序模型 33六
一3.1.2 坐标体系 33八
13.1.3 Shape 和Geometry 338
壹三.二 Shape及其派生类 33玖
13.2.1 直线(Line) 340
13.2.2 矩形(Rectangle) 340
13.2.3 椭圆(Ellipse) 341
13.2.4 折线(Polyline) 341
13.2.5 多边形(Polygon) 342
13.贰.六 填充规则(FillRule) 34贰
13.2.7 路径(Path) 343
一三.3 吉优metry及其派生类 3四三
13.3.1 直线(LineGeometry) 344
13.3.2 矩形(RectangleGeometry) 344
13.3.3 椭圆(EllipseGeometry) 344
一三.三.四 几何图形组(吉优metryGroup) 34五
13.叁.5 合并图形(Combined吉优metry) 3四六
1叁.三.陆 几何途径(Path吉优metry) 34八
一叁.3.七 分段路径(PathSegment) 350
13.3.8 弧线(ArcSegment) 350
13.3.9 直线段(LineSegment) 352
13.3.10 折线段(PolyLineSegment) 353
13.3.11 柏之线(BezierSegment) 353
一三.三.1二 多段柏之线(PolyBezierSegment) 35四
一三.3.一三 一遍柏之线(QuadraticBezierSegment) 35四
一三.三.1四 多段1次柏之线(PolyQuadraticBezierSegment) 355
一三.三.壹伍 Mini绘图语言 356
一3.叁.1陆 流几何图形(Stream吉优metry) 360
13.4 绘制(Drawing) 361
一三.四.一 使用DrawingImage显示几何图形 362
一三.肆.二 使用DrawingVisual来突显几何绘制 3六三
13.4.3 创建DrawingVisual宿主 363
13.肆.四 绘制几何图形 36四
一叁.四.5 把DrawingVisual对象加到FrameworkElement中的视觉树和逻辑树中 36四
一3.四.6 选取视觉元素(Visual Hit Testing) 36陆
13.四.七 简单接纳判断 366
一叁.四.八 四个视觉成分的挑三拣4判断 3陆7
一三.四.九 视觉成分重叠时的选料判断 3陆7
13.5 本章小结 36捌
第1四章 图形转换 36玖
1四.1 图形转换概述 36玖
1肆.二 项目管理器 370
14.三 旋转转换(RotateTransform) 376
1四.肆 位移转换(TranslateTransform) 37捌
1四.5 缩放转换(ScaleTransform) 380
14.陆 扭曲转换(SkewTransform) 3八贰
1四.七 组合转换(TransformGroup) 3捌四
1四.八 矩阵转换(MatrixTransform) 385
1四.八.一 矢量操作 385
14.8.2 H坐标系 386
14.捌.叁 位移转换矩阵 38柒
1四.八.4 旋转转换矩阵 38捌
1四.八.五 缩放转换矩阵 38八
1四.八.6 扭曲转换矩阵 38九
1四.八.7 矩阵操作 38玖
1四.九 本章小结 3九四
第15章 动画 395
一5.一 WPF中的动画 3玖五
一五.二 动画类继承树 3玖陆
1五.三 二个简单易行的动画 3九七
一五.四 控制动画 3玖八
一伍.肆.一 动画所用的小运(duration) 39玖
1伍.4.二 设定动画开头时间BeginTime 399
一五.四.三 设定自动再次来到(AutoReverse) 39玖
壹伍.4.四 设定动画速度(SpeedRatio) 400
一五.4.5 加速和缓手动画(AccelarationRatio和DecelarationRatio) 400
15.四.陆 设定动画的再度性情(RepeatBehavior) 40二
一伍.四.七 设定动画的告1段落景况(FillBehavior) 40二
一伍.四.八 设定相关属性的动画范围(From和To) 40二
一5.四.玖 设定相关属性的卡通范围(By) 40三
15.4.10 设定IsAdditive和IsCumulative 属性 403
一伍.四.1一 WPF动画的岁月片类 403
15.5 故事板(Storyboard) 404
一五.5.一 使用传说板的貌似格式 40四
15.5.2 设定Target和TargetName 406
15.5.3 操作Storyboard 406
15.6 KeyFrame 408
15.6.1 线性KeyFrame 409
15.6.2 非线性KeyFrame(Spline KeyFrame) 412
15.6.3 离散KeyFrame(Discrete KeyFrame) 414
一五.七 本章小结 416
第四篇 开发WPF产品
第3陆章 多媒体技术及其应用 41八
1陆.壹 播放.wav声音格式的SoudPlayer和SoundPlayerAction 41捌
16.1.1 装载.wav文件 418
16.1.2 播放.wav文件 419
16.一.三 停止播放 419
16.1.4 在XAML中使用SoundPlayerAction 419
1陆.2 播放三种格式的声音和图像 420
16.贰.一 播放格局 4二一
16.2.2 使用MediaPlayer实例 422
16.2.3 使用MediaElement和MediaTimeline实例 426
1陆.3 语音合成和话音识别 430
1陆.三.1 尝试Windows Vista的口音作用 43一
1陆.三.2 使您的顺序发音 432
16.3.3 PromptBuilder和SSML 433
1陆.三.四 语音识别中的语法 43四
1陆.四 本章小结 43陆
第贰7章 定制控件和排版 43柒
一七.一 用户控件和自定义控件 肆三柒
一柒.二 成立用户控件(User Control) 43九
一柒.二.壹 设计用户控件UI 43玖
壹七.贰.2 开发援助用户控件UI的逻辑 44二
17.三 创设自定义控件(Custom Control) 4四陆
一七.四 成立自定义排版(Custom Panel) 459
一7.四.1 照片浏览器 四六一
一7.5 本章小结 47一
第28章 综合应用 472
18.1 Ribbon界面大概浏览 472
18.2 项指标团伙 47三
18.3 管理Generic.XAML文件 475
1八.四 开发自定义控件 476
18.四.一 自定义控件间的关系 47陆
18.4.2 Ribbon按钮 477
18.4.3 Ribbon分组(Group) 483
18.4.4 RibbonTabItem 492
18.4.5 RibbonApplicationMenuItem 493
18.4.6 RibbonApplicationMenu 495
18.4.7 RibbonQAToolBar 496
18.4.8 RibbonBar 497
18.4.9 RibbonWindow 498
1八.肆.10 协理不一致皮肤 514
1捌.伍 使用Ribbon自定义控件实例 516
1八.陆 本章小结 525
参考文献 526

质量上的表征可以是 PropertyMetadata只怕UIPropertyMetadata
中的八个,暗许值能够透过那两性意况来安装。若是不加那多个特征,那暗中认可值就是null只怕0

触发器

利用触发器,你能自动化简单的体制改变。

触发器通过Style.Triggers集合链接到样式。每种样式能有很四个触发器,并且每一种触发器是System.Windows.TriggerBase派生类的三个实例。

名字 描述
Trigger 观察依赖属性一个改变,然后使用一个设置器改变样式。
MultiTrigger 这类似于触发器,但是结合多重的条件。触发器生效之前,所有条件必须被满足。
DataTrigger 触发器与数据绑定一起工作。它类似于触发器,除了它监视绑定数据的改变。
MultiDataTrigger 这结合多个数据触发器。
EventTrigger 事件发生时,触发一个动画。
  <Window.Resources>
        <Style x:Key="buttonStyle">
            <Setter Property="Foreground" Value="#999999"/>
        </Style>

    </Window.Resources>

即便是错综复杂属性类型默许值,能够透过重写 OnOverrideMetadata 来设置

一言以蔽之触发器

您能附加简单触发器到别的借助属性。例如,你能响应Control类的IsFocused,IsMouseOver,和IsPressed属性改变,创设鼠标悬停和要害效应。

各类简单触发器标识你监视的品质,以及你希望的值。当那值发生,你存款和储蓄在Trigger.Setters集合中的设置器被接纳。(不幸地,不能够接纳更世故的触发器逻辑,相比三个值落在二个范围内,执行三个测算,等等。在那些情形下,你应转而使用1个事变处理器。)

此间是四个触发器,当按钮获得键盘大旨时,背景变为暗粉末蓝:

<Style x:Key="BigFontButton">
  <Style.Setters>
    <Setter Property="Control.FontFamily" Value="Times New Roman" />
    <Setter Property="Control.FontSize" Value="18" />
  </Style.Setters>

  <Style.Triggers>
    <Trigger Property="Control.IsFocused" Value="True">
      <Setter Property="Control.Foreground" Value="DarkRed" />
    </Trigger>
  </Style.Triggers>
</Style>    

不须求写逻辑反转触发器。触发器结束使用,元素就死灰复燃它的常规的外观。

触发器未有改动依赖属性的原始值。原始值只怕是本地值,也也许是样式值。触发器一失活,触发在此以前的值就重新可用。

触发器集合能够回顾四个触发器。如若,2个以上的触发器修改同1性情能,位于列表最终的触发器赢。

它不爱惜哪1个触发器首发生。例如,WPF不关注在你点击按钮从前1个按钮是或不是收获大旨。触发器被排列在您标记中的地方是它唯壹关怀的事。

MultiTrigger提供二个原则集合,让你定义一文山会海的品质和值的结缘。只有具备的尺码都是真,触发器开启:

<Style x:Key="BigFontButton">
  <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.Foreground" Value="DarkRed" />
      </MultiTrigger.Setters>
    </MultiTrigger>
  </Style.Triggers>
</Style>

接下来调用即可

 

事件触发器

事件触发器等待钦赐的轩然大波被诱惑。事件触发器须求您提供一体系作为修改控件。那些作为被用于选用八个卡通。

事件触发器也是置身Style.Triggers集合中:

<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        。。。
    </EventTrigger>
</Style.Triggers>

见296页。

 <Button Content="Button" Height="23" Style="{StaticResource buttonStyle}"  
HorizontalAlignment="Left" Margin="10,204,0,0" Name="button5" VerticalAlignment="Top" Width="75" />
       protected override void OnOverrideMetadata(OverrideMetadata overridePropertys)
       {
            base.OnOverrideMetadata(overridePropertys);
            overridePropertys.Override("StrokeStyle", new UIPropertyMetadataAttribute(new Stroke(1), false, false, true));
        }

行为

借使给样式钦赐一系列型,则属性中的名字能够去掉,加上钦赐指标项目(TargetType)

 

支撑作为

    <Window.Resources>
        <Style x:Key="buttonStyle" TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="#999999"/>
        </Style>
    </Window.Resources>

 

知道作为模型

 上述中的TargetType能够改成Control ,因为Button是从Control派生而来的。

数量绑定:

创设作为

假诺其余控件也是派生自Control能够将Style1钦点给这个控件也是至极的。这样就能使二种成分共用1种体制。

var bind = label["Text"] <= "Test";//右到左数据绑定,数据源是DataContext的属性

var bind = label["Text"] >= "Test";//左到右数据绑定,数据源是DataContext的属性

var bind = label["Text"] != "Test";//右到左数据绑定,只传递一次 ,数据源是DataContext的属性

var bind = label["Text"] == "Test";//双向绑定,数据源是DataContext的属性,双向绑定需要对象实现INotifyPropertyChanged



var bind = label["Text"] <= button["Test"];//右到左数据绑定

var bind = label["Text"] >= button["Test"];//左到右数据绑定

var bind = label["Text"] != button["Test"];//右到左数据绑定,只传递一次

var bind = label["Text"] == button["Test"];//双向绑定

运用行为

如:

 

Blend的设计时作为补助

  <Window.Resources>  
      <Style x:Key="Style1" TargetType="{x:Type Control }">          
  <Setter Property="FontSize" Value="16"></Setter>            <Setter Property="Width" Value="180"></Setter>   
         <Setter Property="Height" Value="30">
</Setter>       
 </Style>    
</Window.Resources>   
 <Grid>        
<Button Style="{StaticResource Style1}" Margin="23,32,95,139">Button1</Button>   
     <CheckBox Style="{StaticResource Style1}" Margin="23,130,95,41">Checkbox1</CheckBox> 
   </Grid>

 

 Button、Check能够应用Style1,而TextBlock则丰硕,原因是TextBlock不是派生自Control。

一声令下绑定:

起用样式(Reusing Styles)

当事件触发也许性质变化的时候调用方法

  重用样式指的是,样式能够有所指标所未曾的性质。比如,我们想定义1种样式,当中包涵不想被有着因素共享的本性,而只愿意那些非共享属性应用到特定的因素上。那时,大家就足以去掉目的项目,重新加上前缀。

label.AddCommand("MouseDown","button1_Click","CommandContext", Wtf.Windows.CommandParameter.EventArgs);

        /// <summary>
        /// 添加处理命令,命令方法在CommandContext或者其他属性的对象上
        /// </summary>
        /// <param name="eventName">触发的事件名或者属性名</param>
        /// <param name="methodName">命令方法名</param>
        /// <param name="propertyName">命令对象所在的属性名</param>
        /// <param name="ps">方法参数,可以是自定义的数据或者相关属性或者事件的数据</param>
        public void AddCommand(string eventName, string methodName, string propertyName = "CommandContext", params object[] ps)
    <Window.Resources>     
   <Style x:Key="Style1">   
         <Setter Property="CheckBox.FontSize" Value="16"></Setter>        
    <Setter Property="Button.Foreground" Value="Red"></Setter>    
        <Setter Property="CheckBox.IsChecked" Value="True"></Setter>     
   </Style>  
  </Window.Resources>  
  <Grid>      
  <CheckBox Style="{StaticResource Style1}" Margin="23,32,95,139">Button1</CheckBox>     
   <TextBlock Style="{StaticResource Style1}">TextBlock1</TextBlock>  
  </Grid>

 

 将Style壹同时钦赐给CheckBox1和TextBlock1,TextBlocak会自动忽略不适用它们自己的样式属性IsChecked。而互相公有的习性(比如Foreground、FontSize),不论加不加前缀,对两岸都使得。

 

重写样式(Overriding Style)

部分项指标隐式转换

  重写样式属性类似于面向对象中的重写,其职能也接近于CSS中的样式覆盖。最后的外观取决于近来的体制或然性质。比如,给多个因素钦点了三个体裁,当中包涵FontSize属性值为14。而在要素定义时,重新给它的习性FontSize设置了多个值1捌。最后成分文本的FontSize将为1八。

Brush, Color :  “#0000ff” “#ff0000ff” “25五,255,255” 
“25五,255,255,255”  颜色字符串转换,按顺序是r,g,b、a,r,g,b

 

 

  <Window.Resources>     
   <Style x:Key="Style1">    
        <Setter Property="Button.FontSize" Value="14"></Setter>    
    </Style>  
  </Window.Resources>   
 <Grid>       
 <Button Width="80" Height="30" FontSize="18">Button1</Button>   
 </Grid>

FloatValue: “百分之10” “拾0” “zero” “auto”  拾0  100.5    
数字大概百分比字符串转换,整形,浮点数据自动转换

 拓展样式(Extending Styles)

 

  能够对现有体制实行进行,类似于面向对象中的继承或派生,能够在丰裕新的习性只怕重载已存在的性情。

触发器样式例子

  <Window.Resources>      
  <Style x:Key="Style1" TargetType="Button">
            <Setter Property="FontSize" Value="16"></Setter>  
          <Setter Property="Foreground" Value="Red"></Setter>        </Style>    
    <Style x:Key="Style2" BasedOn="{StaticResource Style1}" TargetType="Button">       
     <!--添加新属性-->           
 <Setter Property="FontWeight" Value="Bold"></Setter>  
          <!--重载-->          
  <Setter Property="Foreground" Value="Yellow"></Setter>      
  </Style>    </Window.Resources>    <Grid>       
 <Button Style="{StaticResource Style1}"  Width="80" Height="30" FontSize="18" Margin="109,55,109,116">Button1</Button>   
     <Button Style="{StaticResource Style2}" Width="80" Height="30" FontSize="18" Margin="109,120,109,51">Button2</Button> 
   </Grid>

 

三、成分类型样式

按钮的鼠标操作成效,鼠标移入移出按下背景象变化

 1般的话,我们希望用户界面上的控件拥有统一外观,比如存有按钮大小同等、颜色相同等,那时大家得以定义壹种成分的体裁,对贰个限量内的装有因素都有效,那就是因素类型样式。

            

  同壹品种成分共享外观

 

  若是希望多少个世界级窗口内具备的要素,具有同样的体制和外观——能够如此达成:一.在顶尖窗口能源中定义2个体裁,不标记x:Key,将TargetType设置为一种因素类型。二.定义成分,不用钦赐Style,窗口中有着该品种的因素,都将采取能源中定义的体裁,并兼有合并外观。

       Styling.Trigger hover = new Styling.Trigger { Condition = Styling.Conditions.Equals, Property = "IsMouseOver", Value = true };

            hover.Setters.Add("Background", Drawing.Brush.Parse("#ff0000"));

            Styling.Trigger normal = new Styling.Trigger { };

            normal.Setters.Add("Background", Drawing.Brush.Parse("#00ff00"));

            Styling.Trigger press = new Styling.Trigger { Condition = Styling.Conditions.Equals, Property = "IsMouseCaptured", Value = true };

            press.Setters.Add("Background", Drawing.Brush.Parse("#ffff00"));

            label.Triggers.Add(normal);

            label.Triggers.Add(hover);

            label.Triggers.Add(press);

            label.MouseDown += delegate
            {
                label.CaptureMouse();
            };

            label.MouseUp += delegate
            {
                label.ReleaseMouseCapture();
            };
<Window.Resources>    
    <!--Button 样式-->     
   <Style TargetType="{x:Type Button}">  
          <Setter Property="FontWeight" Value="Normal"></Setter>          
  <Setter Property="Foreground" Value="Green"></Setter>      
  </Style>       
    <!--TextBlock 样式-->     
   <Style TargetType="TextBlock">   
         <Setter Property="FontSize" Value="16"></Setter>      
      <Setter Property="Foreground" Value="Red"></Setter>     
   </Style>   
 </Window.Resources> 
   <Grid>  
      <Button Name="Button1" Width="80" Height="30" Margin="46,41,172,130">Button1</Button>    
            <Button Name="Button2" Width="80" Height="30" Margin="46,90,172,80">Button2</Button>   
     <TextBlock Name="TextBlock1" Margin="164,41,38,0" Height="30" VerticalAlignment="Top">TextBlock1</TextBlock>   
     <TextBlock Name="TextBlock2" Margin="164,90,38,80">TextBlock2</TextBlock>  
  </Grid>

 

 作用范围

 

  以上的共享外观不仅局限于顶尖窗口,而是根据你定义的体制所在的界定。假设您将样式定义在三个面板能源中,共享外观将只是功用该面板。

WtfObject
的品质设置的值优先级比触发器样式设置的值要高,所以当您设置了属性值,触发器样式只怕没有效益

  窗口范围(成效于该窗口)

 

 

 

<Window ...>
    <Window.Resources>
        <!--Button 样式-->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="Green"></Setter>
        </Style>           
    </Window.Resources>
</Window>

添加UI成分,UI成分能够相互嵌套

面板范围(功用于该面板)

            var root = testControl1.RootUIElement;
            root.Foreground = "#ff0000";
            root.FontFamily = "微软雅黑";
            root.FontSize = 16;
            root.Children.Add(label);
            root.Children.Add(new Windows.Shapes.Ellipse
            {
                Stroke = "#0000ff",
                Fill = "white",
                Width = 40,
                Height = 20,
                MarginLeft = 30,
                MarginTop = 30
            });

            root.Children.Add(new Windows.Shapes.Ellipse
            {
                Stroke = "#0000ff",
                Fill = "white",
                Width = 40,
                Height = 20,
                MarginRight = "30%",
                MarginTop = 30

            });    
<Grid>
        <Grid.Resources>
            <!--Button 样式-->
            <Style TargetType="{x:Type Button}">
                <Setter Property="Foreground" Value="Green"></Setter>
            </Style>
        </Grid.Resources>
        <!---->
    </Grid>

 

 应用程序范围(功能于该应用程序)

 

<Application ...>   
 <Application.Resources>     
   <!--Button 样式-->   
     <Style TargetType="{x:Type Button}">    
        <Setter Property="Foreground" Value="Green">
</Setter>      
  </Style>  
  </Application.Resources>
</Application>  

要素布局,支持百分比搭架子,margin调整定位,暗许居中。

4、编制程序序控制制样式

 

由此代码更改按钮Button一的体制:

触发器绑定动画

<Window.Resources>
        <!--Style1-->
        <Style x:Key="Style1" TargetType="{x:Type Button}">
            <Setter Property="FontWeight" Value="Normal"></Setter>
            <Setter Property="Foreground" Value="Green"></Setter>
        </Style>
        <!--Style2-->
        <Style x:Key="Style2" TargetType="{x:Type Button}">
            <Setter Property="FontWeight" Value="Bold"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>                        
        </Style>
    </Window.Resources>

    <Grid>
        <Button Name="Button1" Width="100" Height="40" Style="{StaticResource Style1}">Button</Button>        
        <Button Name="Button2" Width="150" Height="30" Click="Button2_Click" Margin="79,143,69,28">Change Button1's Style</Button>
    </Grid>

private void Button2_Click(object sender, RoutedEventArgs e)
{
    this.Button1.Style = (Style)FindResource("Style2");
}
            var t = new Trigger();
            Storyboard ss = new Storyboard();
            ss.Duration = new TimeSpan(0, 0, 0, 0, 500);
            var tl = new Timeline(1);
            tl.KeyFrames.Add(new KeyFrame<FloatValue> { Property = "Height", Value = 300, Ease = new BounceEase(), AnimateMode = AnimateMode.EaseIn });
            tl.KeyFrames.Add(new KeyFrame<FloatValue> { Property = "Width", Value = "30%", Ease = new BounceEase(), AnimateMode = AnimateMode.EaseIn });
            tl.KeyFrames.Add(new KeyFrame<GeneralTransform> { Property = "RenderTransform", AnimateMode = AnimateMode.EaseOut, Value = new GeneralTransform { Angle = 30 }, Ease = new ElasticEase() });
            //tl.KeyFrames.Add(new KeyFrame<SolidColorBrush> { Property = Shape.FillProperty, Value = "White" });
            ss.Timelines.Add(tl);
            t.Property = "IsMouseOver";
            t.Value = true;
            t.Animation = ss;
            t.Setters.Add("Fill", Brush.Parse("#fff"));
            v.Triggers.Add(t);

 五、触发器

 

体制(Styles)由三片段组成:设置器(Setter)、触发器(Triggers)、能源(Resources)。触发器,让体制的使用越来越精确、灵活和神速。触发器(Triggers)首要分为3类,属性触发器(检查从属属性即WPF成分自个儿性质)、数据触发器(检查任意可绑定的质量)、事件触发器(用于监听事件)。

如果写自定义控件,继承Wtf.Windows.Controls.Control
 然后重写InitializeComponent
把体制定义代码写在里边,要是重复连任修改的话,能够重写覆盖。

品质触发器

dll临时不提供下载

  检查从属属性的值,即WPF成分自个儿性质。比如按钮的情节、字体的轻重、颜色等等。

亚洲必赢官网 2

<Window.Resources> 
       <Style TargetType="Button">    
        <Style.Triggers>           
     <Trigger Property="Content" Value="按钮">         
           <Setter Property="ToolTip" Value="这是一个按钮">
</Setter>              
  </Trigger>         
   </Style.Triggers>   
     </Style>    
</Window.Resources>

 

 <Button
Content=”按钮” Height=”23″ HorizontalAlignment=”Left” Margin=”28,6,0,0″
Name=”button1″ VerticalAlignment=”Top” Width=”102″ />

专注的是: <Trigger Property=”Content”
Value=”按钮”>        一定要和<Button
Content=”按钮”..   content的值1样,不然掉不出去
 亚洲必赢官网 3

多属性触发器

 <Window.Resources> 
       <Style TargetType="Button">      
      <Style.Triggers>     
           <Trigger Property="Content" Value="按钮">             
       <Setter Property="ToolTip" Value="这是一个按钮"></Setter>           
     </Trigger>           
     <Trigger Property="Content" Value="Button">   
                 <Setter Property="ToolTip" Value="This is a button"></Setter>          
      </Trigger>         
   </Style.Triggers>    
    </Style>    
</Window.Resources>

亚洲必赢官网 4

多规格属性触发器

  <Window.Resources>   
     <Style TargetType="Button">   
         <Style.Triggers>        
        <MultiTrigger>           
         <!--条件列表-->            
        <MultiTrigger.Conditions>        
                <Condition Property="Content" Value="按钮"></Condition>      

  <Condition Property="Visibility" Value="Visible"></Condition>                    </MultiTrigger.Conditions>       
             <!--样式-->           
         <Setter Property="ToolTip" Value="这是一个可见按钮"></Setter>            
    </MultiTrigger>       
     </Style.Triggers>    
    </Style>  
  </Window.Resources>

 数据触发器

  能够检查任意可绑定的属性,比如CLPRADO对象属性、XPath表明等。相对于属性触发器,数据触发器平常用来检查不可知的靶子属性。

   

<Window x:Class="WpfApplication2.样式的用法.styleDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="styleDemo" Height="300" Width="300">
    <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Name}" Value="dd">
                    <Setter Property="Foreground" Value="Tomato"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/>
    </Grid>
</Window>

  public partial class styleDemo : Window
    {
        public styleDemo() 
        {
            InitializeComponent(); 
            DataContext = new Person("dddd", "dd"); }

        class Person { 
            string _Name;
            public string Name { get { return _Name; }
            set { _Name = value; } }
            string _Age; 
            public string Age { get { return _Age; } 
                set { _Age = value; } }
            public Person(string name, string age) 
            { _Name = name; _Age = age; } }
    }

多规格数据触发器

<Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <MultiDataTrigger>
                    <!--条件列表-->
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=Name}" Value="李宝亨"/>
                        <Condition Binding="{Binding Path=Age}" Value="21"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Foreground" Value="Tomato"/>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/>
    </Grid>

事件触发器

<Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <!--事件触发器-->
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.1" Duration="0:0:3"></DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

后续..

网站地图xml地图