Wtf(近日命名,随便起的 =
_=),模仿WPF的框架,还没有全面,唯有大致的根底成分,帮忙数据绑定。即使扶助mono可是mono有bug

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

      
前面简而言之到了wpf中两种体裁的用法,wpf有着相仿web中的CSS壹样,为界面上的要素定制外观,以提供更加好的用户界面,这种灵活性也是winForm所不能够及的,在此以前方讲到的能够领略在WPF应用程序中,通过控件的习性,大家也能够完结转移控件的外观。可是,那种措施局限性大、不灵活且不方便人民群众珍惜,比如1个,三个按钮的体裁能够这么,要是有二10,二五个,甚至更加多,难道也那样吧,显明这不是很好的接纳,要是大家将上述控件的质量归结起来,写到1段样式中,为按钮内定该样式(甚至用成分类型样式时,都不须求钦定按钮样式),全体按钮就持有合并样式和外观了。假使想修改按钮外观,我们只供给改一下体裁代码即可,全数按钮外观都会随着变动。

WPF专业编制程序指南 金沙注册送58 1

写那些只是兴趣爱好,感觉也没多马虎思了,借使那几个UI框架完善了,有稍许人愿意用?毕竟Windows上有WPF,而且C#跨平台须要也不多啊。笔者对WPF也不算熟习,要完美的话,还有许多要写。一大堆常用控件和设计器。可是作者不要XML来描述,而是一直用C#来定义,设计器直接生成C#代码,因为本身以为,假设有强有力的设计器,写XML正是多余的,而且解析XML还影响属性,对于WPF,作者以为Xaml太啰嗦了。

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

体制的施用有三种方法,如内联样式(定义在要素内部)、已命名样式(为样式命名,使用时经过名称引用)、成分类型样式(为1种档次的元素,钦定壹种体裁)等等。

定价 : ¥68.00

 

体制基础

体制是1种重大的财富。

体制是属性值的成团,能被应用到三个要素。就像是CSS,WPF样式允许你定义格式化特性并且遍及应用程序地应用它们去保障一致性。就如CSS,WPF样式能够级联通过成分树自动地运用到内定的因素类型的指标。而且,WPF样式越来越强力,因为他俩得以设置任何借助属性。那表示你能够使用它们标准化格式化以外的天性,诸如控制控件的行为性质。WPF样式也支撑触发器,那允许你当另1特性质被改成时改变控件的体裁,并且她们得以动用模板去重定义控件的内建国门外观。

属性值继承,是依靠属性的特征之一。当你在窗口水平设置属性时,窗口内部装有的成分将得到同样的值,除非显式地掩盖他们。

考虑下边代码:

<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对象。样式对象拥有三个设置器集合,带有3设置器对象,每一个设置器设置3个属性。每一种设置器对象提出要设置属性的名字。和该属性的值。就像全体的财富,样式对象有一个用来检索财富的显要字。在本例中,关键字是BigFontButtonStyle。(根据约定,样式关键字的最终是Style。)

各样WPF成分只可以利用一个体制(或能够不选择样式)。1个因素通过Style属性应用样式。例如,为布局1个按钮使用你从前创立的体制,按钮像这么应用样式财富:

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

理所当然,能够接纳代码内定样式。方法是用FindResource()方法:

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

Style类1共有陆个基本点的品质:

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

一、内联样式

会员价

¥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>

比如上面包车型地铁为text博克斯加样式

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

性能写法:

安装属性

如您所见,每一种Style对象包裹多个Setter对象的聚众。各类Setter对象设置二个因素的贰个属性。唯一限制是叁个设置器只可以改成1个凭借属性—不可能修改别的属性。

在一部分景况下,你不可能使用八个简短的字符串设置属性值。例如,不可能利用二个简易字符串创设二个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>

 

为识别你愿意设置的天性,你要求提供一个类和一个特性的名字。可是,类名字不需若是概念属性的类。它也能是此类的1个派生类。例如,思考上边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 年3月
开本: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来定义样式。不过缺点也是无人不晓的,若是有八个这么的控件指向同叁个样式,该如何做呢,只可以每一种都要写,所以很不佳,所以我们能够在能源中定义三个体制,然后让三个控件调用那二个体裁即可

【编辑推荐】
到家系统,深切应用
通俗易懂,实例足够

        /// <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专业编制程序指南》是壹本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属性为空。

 将一如既往的内敛样式归咎起来,放入能源中,构成一个样式,并为它起3个名字。那样,就能够透过名为因素钦点该样式。

目录

率先篇 WPF编制程序基础
第一章 WPF应用程序 二
一.一 WPF应用程序的创设 贰
1.2 Dos窗口 3
一.3 WPF应用程序的开发银行和截止 四
一.四 输入参数 五
1.5 在Xaml中创建Application 7
1.6 窗口大小 拾
1.七 网络应用程序 10
一.8 应用程序的百般处理 1壹
1.玖 应用程序中的能源 1二
一.10 应用程序的颁发 壹三
一.1一 WPF开发环境 1四
一.1二 本章小结 15
第2章 XAML语言 16
贰.1 XAML是一种界面描述语言 16
二.贰 XAML的根成分 一7
②.三 XAML命名空间(NameSpace) 一7
二.肆 XAML和代码分离技术(code behind) 18
2.5 子元素 19

.2.陆 相关属性(Dependency Property) 20
二.柒 附加属性(Attached Property) 二一
贰.八 XAML符号扩充 2一
二.八.一 静态能源扩充(StaticResourceExtension) 2二
WPF样式和行为,样式的使用。二.8.2 动态财富扩展(DynamicResourceExtension) 23
2.八.三 数据绑定增添(Binding) 二肆
二.⑧.四 相对数据源扩充(RelativeSource) 24
二.捌.伍 模板绑定(TemplateBinding) 2伍
2.8.6 x:Type扩展 26
2.8.7 x:Static扩展 26
2.8.8 x:null扩展 26
2.8.9 x:Array扩展 26
2.玖 本章小结 贰七
第3章 WPF排版 28
3.一 排版基础 2八
叁.二 堆积面板(StackPanel) 2九
3.3 WrapPanel 34
三.四 停靠面板(DockPanel) 3五
三.5 表格式面板(Grid) 3玖
金沙注册送58 ,三.5.一 设定UI成分在Grid中的地方 40
三.伍.贰 设定Grid行或列的尺寸 40
三.5.三 成分横跨三个连串时的设定 ④壹
3.5.4 在Grid中维系多行或多列大小的一致性 4四
3.6 UniformGrid 46
三.7 画布面板(Canvas) 肆七
3.八 本章小结 48
第陆章 WPF中的属性系统 4九
4.1 CLR属性 49
四.2 相关属性的概念 50
肆.贰.壹 相关属性的传递 50
肆.二.贰 WPF对有关属性的帮衬 5①
四.三 自定义相关属性 5二
四.肆 附加属性 58
四.伍 本章小结 陆柒
第肆章 画笔和画刷 68
伍.壹 WPF中的颜色 6捌
5.2 画刷 75
5.2.一 实心画刷(SolidColorBrush) 76
伍.贰.二 梯度画刷(GradientBrush) 77
伍.二.3 线性梯度画刷(LinearGradientBrush) 77
伍.二.4 圆形梯度画刷(RadialGradientBrush) 80
5.二.五 自制画刷(DrawingBrush) 捌1
伍.二.陆 粘贴情势(TileMode) 八2
5.二.7 伸展格局(Stretch) 八三
5.2.8 图像画刷(ImageBrush) 八三
5.贰.玖 控件画刷(VisualBrush) 85
5.3 画笔 88
伍.4 本章小结 95

第壹篇 WPF专业程序员必备
第6章 WPF控制 98
6.1 WPF控件概述 玖八
陆.贰 内容控件(Content Control) ⑩0
六.2.一 框架控件(Frame) 十0
6.2.2 WPF按钮(Button) 101
陆.二.三 拨动按钮(ToggleButton) 10四
6.2.4 CheckBox控件 104
6.2.5 RadioButton控件 104
六.2.6 重复按钮(RepeatButton) 拾伍
⑥.2.7 带有题目栏的情节控件(HeaderedContentControl) 拾六
6.2.8 分组框(GroupBox) 107
陆.贰.九 伸展控件(Expander) ⑩玖
6.二.十 标签控件(Label) 110
6.贰.1壹 为按钮设置热键 11一
6.2.12 ToolTip 113
6.2.13 ScrollViewer 115
陆.3 条目控件(Items Controls) 116
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
6.三.玖 树形控件TreeView和TreeViewItem 140
六.四 文本控件(Text Controls) 1肆三
陆.四.壹 口令输入框(Password博克斯) 1四三
六.4.二 文字输入框(TextBox) 144
6.4.3 RichTextBox 145
6.五 范围控件(Range Controls) 1肆陆
6.5.1 滚动条(ScrollBar) 146
6.5.2 滑动条(Slider) 147
6.5.3 进展条(ProgressBar) 152
6.六 本章小结 15二
第十章 传递事件和传递命令系统 一5叁
7.一 WPF中的成分树 1五三
七.二 传递事件(Routed 伊夫nt) 1六5
7.2.1 RoutedEventArgs 166
7.贰.二 终止事件传播 166
七.二.三 处理传递事件 1陆7
7.贰.四 附加传递事件(Attached Routed 伊夫nt ) 16八
7.三 考查传递事件 16八
7.3.1 键盘事件的发生和传递 17四
七.④ 自定义传递事件 17四
7.伍 管理键盘和鼠标输入事件 18二
七.5.壹 键盘输入 1八二
七.伍.二 鼠标输入 1八二
七.六 传递命令 184
7.6.1 ICommand接口 186
7.6.2 ICommandSource接口 186
7.6.3 CommandTarget 186
柒.陆.4 命令绑定(CommandBinding) 1八陆
7.陆.5 传递命令(Routed Command) 187
柒.陆.陆 WPF命令仓库(Command Repository) 1八柒
柒.7 本章小结 190
第8章 资源 191
8.一 财富定义及其类型 1玖一
8.二 统壹能源标识(Unified Resource Identifier) 1九贰
捌.叁 .NET开发平台对财富国际化的补助 196
8.三.一 WinForm下的财富管理 1九七
八.3.二 用XAML创制当地财富 200
八.四 WPF成分中定义的财富 20二
八.4.一 静态财富(StaticResource) 203
八.肆.2 能源的意义范围 20四
8.4.三 静态扩大标识(Static markup extension) 205
捌.四.4 动态财富扩大标识(DynamicResource 马克up Extension) 20八
八.伍 本章小结 210
第9章 风格 211
9.1 Style类 211
9.2 Setters 211
9.3 TargetType 215
9.4 BasedOn 218
9.5 触发器(Triggers) 220
玖.5.一 使用单一条件的触发器 2贰一
九.5.二 使用多个标准化的触发器 22二
玖.5.三 使用数据触发器(DataTrigger) 2二三
玖.6 风格中的能源 225
9.7 IsSealed 227
九.八 把作风定格定义在独立的公文中 2二柒
9.九 在FrameworkContentElement中动用风格 22八
9.10 再谈Setter属性 229
玖.1壹 本章小结 230
第10章 模板 231
十.一 模板概述 23一
拾.二 控件模板 23二
十.二.1 在控件中动用模板 23二
10.贰.2 在能源中应用模板 23四
10.贰.三 在控件模板中运用TargetType 23伍
十.贰.四 在模板中呈现控件的始末 23陆
10.2.5 在模板中应用ContentPresenter 237
10.二.6 模板一月素名Name属性 23玖
10.2.⑦ 在模板中绑定控件的任何属性 23九
10.2.八 使用模板展现电力系统的断路器和刀闸开关 240
10.二.玖 在作风中央银行使模板 24贰
10.贰.10 获取WPF控件的模版 24三
10.3 数据模板(DataTemplate) 24肆
拾.三.一 大家所面临的题目 24四
拾.三.二 定义数据模板 贰四7
拾.3.三 在能源中央银行使数据模板 24八
十.三.肆 数据模板触发器 24玖
10.3.五 依据数据属性选取相应的沙盘 250
十.三.陆 在数量模板中选用类型转换技术 2伍三
10.4 ItemsPanelTemplate 258
十.伍 层次结构数据模板(HierarchicalDataTemplate) 25玖
拾.6 本章小结 26贰
第壹一章 数据绑定(Data Binding) 二陆3
11.一 数据绑定概述 26三
1壹.二 最简单易行的数额绑定——从界面元素到界面元素 26四
1一.二.一 一对1数目绑定 26四
11.2.2 在C#中,达成数量绑定 26伍
1一.贰.三 对不是FrameworkElement和FrameworkContentElement成分完毕多少绑定
26陆
1①.3 使用分化的绑定情势 26六
11.四 动态绑定 2六7
1一.5 最简便易行的数量绑定——从.NET对象到界面成分 268
11.6 DataContext 271
11.7 控制绑定时刻 27二
11.八 开发协调的IValueConverter 27三
1壹.九 在数据绑定中投入校验 27伍
1一.玖.一 开发工作规则类 276
1一.玖.二 在绑定中丰盛任意两个事情规则 279
1一.玖.三 在控件上展现校验音讯 279
1一.9.四 触发错误处总管件 280
1一.九.伍 清除控件上的错误音讯 2捌二
1一.10 对聚集对象的绑定 28三
11.10.1 使用DisplayMemberPath属性 286
1一.10.贰 展现当前条目 286
1一.十.三 遍历集合中的记录 28八
1一.十.4 增添或删除记录 290
11.10.5 对聚集对象分组 2九三
1一.拾.六 对聚集对象排序 2九四
1一.10.七 对聚集对象过滤 2玖伍
11.11 数据源 296
11.11.1 XML数据源 296
11.1一.贰 .NET对象数据源 30壹
1壹.1二 层次结构数据的绑定 30三
1一.1三 本章小结 30三
第叁2章 窗口对话框和打字与印刷 30四
12.1 窗口(Window) 304
12.1.1 窗口的景观变化和事件 30四
1二.①.二 鲜明视窗的职责 30九
12.1.三 明确视窗的深浅 3十
12.一.四 视窗状态属性(WindowState) 3十
1二.一.伍 视窗大小情势(ResizeMode) 310
1二.一.陆 视窗风格(WindowStyle) 31一
12.2 网页(Page) 311
1二.②.一 创设网页 31二
12.2.2 KeepAlive属性 312
12.2.3 NavigationService属性 312
12.2.4 ShowsNavigationUI属性 313
12.三 浏览窗口(NavigationWindow) 3壹三
1贰.三.一 使用统一风格 31四
12.3.2 设置NavigationWindow的标题 314
1二.3.三 浏览网页 3一五
12.3.4 使用HyperLink类 315
1二.3.5 使用NavigationService转到差异的网页 31八
1二.叁.6 使用浏览日志转换来不一样的网页 31九
1二.三.七 浏览窗口的浏览事件 31玖
12.4 对话框(DialogBox) 320
12.4.1 消息框(MessageBox) 320
1二.四.2 通用对话框 320
1贰.四.三 自定义对话框 32二
1贰.5 打字与印刷输出 3二三
1二.5.一 XPS 文书档案简介 3二三
12.5.2 创建XPS文档 324
12.5.3 显示XPS文档 328
12.5.4 打印 333
1二.6 本章小结 333

其叁篇 图形和卡通片
第3三章 2维图形 33六
一三.一 WPF图形系统概述 33六
壹3.1.一 统一编制程序模型 33陆
1三.一.二 坐标体系 33八
13.1.3 Shape 和Geometry 338
一3.二 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
一三.二.陆 填充规则(FillRule) 34二
13.2.7 路径(Path) 343
壹三.三 Geometry及其派生类 3四三
13.3.1 直线(LineGeometry) 344
13.3.2 矩形(RectangleGeometry) 344
13.3.3 椭圆(EllipseGeometry) 344
一3.三.四 几何图形组(吉优metryGroup) 345
一叁.3.5 合并图形(Combined吉优metry) 3四陆
一3.三.6 几何途径(Path吉优metry) 34八
一三.叁.柒 分段路径(PathSegment) 350
13.3.8 弧线(ArcSegment) 350
13.3.9 直线段(LineSegment) 352
13.3.10 折线段(PolyLineSegment) 353
13.3.11 柏之线(BezierSegment) 353
一③.3.1二 多段柏之线(PolyBezierSegment) 35四
一叁.三.1三 二次柏之线(QuadraticBezierSegment) 354
1叁.三.1四 多段1次柏之线(PolyQuadraticBezierSegment) 35五
13.三.一伍 迷你绘图语言 35陆
壹三.三.1陆 流几何图形(Stream吉优metry) 360
13.4 绘制(Drawing) 361
一三.4.1 使用DrawingImage展现几何图形 36二
1三.四.贰 使用DrawingVisual来呈现几何绘制 3陆三
13.4.3 创建DrawingVisual宿主 363
壹三.四.四 绘制几何图形 36四
一3.4.伍 把DrawingVisual对象加到FrameworkElement中的视觉树和逻辑树中 36四
一叁.四.6 选用视觉成分(Visual Hit Testing) 366
一三.肆.7 简单采纳判断 36陆
一3.四.捌 七个视觉成分的接纳判断 3陆7
一三.肆.九 视觉成分重叠时的取舍判断 36七
一三.5 本章小结 368
第一4章 图形转换 36九
1四.一 图形转换概述 36九
1四.二 项目管理器 370
1肆.3 旋转转换(RotateTransform) 37陆
14.四 位移转换(TranslateTransform) 37捌
1四.5 缩放转换(ScaleTransform) 380
14.陆 扭曲转换(SkewTransform) 382
1四.7 组合转换(TransformGroup) 3八肆
1肆.八 矩阵转换(MatrixTransform) 3八五
14.8.一 矢量操作 3八5
14.8.2 H坐标系 386
1四.八.三 位移转换矩阵 3捌七
14.8.四 旋转转换矩阵 38八
14.8.5 缩放转换矩阵 388
14.八.陆 扭曲转换矩阵 38九
1四.8.7 矩阵操作 38玖
1四.玖 本章小结 3九四
第15章 动画 395
15.一 WPF中的动画 39伍
一伍.二 动画类继承树 3九六
壹5.3 三个简单易行的动画 3玖七
壹5.4 控制动画 39捌
一伍.四.1 动画所用的时刻(duration) 39九
15.四.二 设定动画开端时间Begin提姆e 39九
一五.4.③ 设定自动回到(AutoReverse) 39⑨
一伍.4.四 设定动画速度(SpeedRatio) 400
一五.4.5 加速和缓手动画(AccelarationRatio和DecelarationRatio) 400
一伍.四.6 设定动画的重复特性(RepeatBehavior) 40二
1五.四.七 设定动画的平息意况(FillBehavior) 40二
一五.四.8 设定相关属性的卡通范围(From和To) 40二
一5.肆.玖 设定相关属性的卡通范围(By) 40三
15.4.10 设定IsAdditive和IsCumulative 属性 403
1伍.肆.11 WPF动画的年华片类 40三
15.5 故事板(Storyboard) 404
壹5.五.一 使用故事板的貌似格式 404
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
壹5.7 本章小结 41陆
第四篇 开发WPF产品
第1陆章 多媒体技术及其应用 418
1陆.壹 播放.wav声音格式的SoudPlayer和SoundPlayerAction 41八
16.1.1 装载.wav文件 418
16.1.2 播放.wav文件 419
16.一.三 停止播放 41玖
16.1.4 在XAML中使用SoundPlayerAction 419
1陆.二 播放各个格式的响声和图像 420
1陆.二.一 播放情势 4贰一
16.2.2 使用MediaPlayer实例 422
16.2.3 使用MediaElement和MediaTimeline实例 426
1六.三 语音合成和话音识别 430
1六.3.一 尝试Windows Vista的口音功用 43一
1陆.三.二 使您的先后发音 43二
16.3.3 PromptBuilder和SSML 433
16.三.肆 语音识别中的语法 43四
1陆.四 本章小结 43陆
第叁7章 定制控件和排版 肆三7
17.一 用户控件和自定义控件 肆三7
17.二 制造用户控件(User Control) 43九
壹柒.二.一 设计用户控件UI 43九
①7.贰.贰 开发补助用户控件UI的逻辑 44贰
一7.三 创设自定义控件(Custom Control) 4肆6
一七.4 成立自定义排版(Custom Panel) 45玖
一7.四.一 照片浏览器 四陆1
17.伍 本章小结 471
第三8章 综合应用 472
1八.一 Ribbon界面大概浏览 47二
1八.2 项指标团队 47三
18.3 管理Generic.XAML文件 475
1八.四 开发自定义控件 47⑥
1八.肆.一 自定义控件间的涉嫌 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八.4.十 辅助区别皮肤 514
1八.5 使用Ribbon自定义控件实例 51六
18.六 本章小结 5二伍
参考文献 5贰陆

品质上的特征能够是 PropertyMetadata只怕UIPropertyMetadata
中的1个,私下认可值能够经过那多少个特征来安装。倘使不加那五个特点,那默许值正是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集合中的设置器被采纳。(不幸地,不能够应用更世故的触发器逻辑,相比二个值落在八个限量内,执行三个盘算,等等。在那么些景况下,你应转而采纳一个轩然大波处理器。)

那边是3个触发器,当按钮获得键盘核心时,背景变为暗深红:

<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>    

不须求写逻辑反转触发器。触发器截止利用,成分就死灰复燃它的正规的外观。

触发器未有改动依赖属性的原始值。原始值大概是地点值,也说不定是样式值。触发器一失活,触发此前的值就再一次可用。

触发器集合能够回顾多少个触发器。要是,一个上述的触发器修改同1本品质,位于列表最终的触发器赢。

它不关切哪叁个触发器头阵生。例如,WPF不爱戴在您点击按钮在此以前叁个按钮是不是收获核心。触发器被排列在您标记中的地方是它唯一关注的事。

MultiTrigger提供二个条件集合,让你定义1多重的性质和值的叁结合。唯有具有的标准都以真,触发器开启:

<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));
        }

行为

尽管给样式钦点1种档次,则属性中的名字能够去掉,加上钦点指标项目(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钦赐给这个控件也是适当的。那样就能使二种因素共用一种样式。

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能够行使Style一,而TextBlock则不行,原因是TextBlock不是派生自Control。

命令绑定:

选定样式(Reusing Styles)

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

  重用样式指的是,样式能够享有目的所未曾的属性。比如,大家想定义一种体裁,在那之中涵盖不想被全体因素共享的性质,而只愿意那么些非共享属性应用到一定的因素上。那时,大家就能够去掉目的项目,重新加上前缀。

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和TextBlock壹,TextBlocak会自动忽略不适用它们自己的体制属性IsChecked。而互相公有的习性(比如Foreground、FontSize),不论加不加前缀,对两端都有效。

 

重写样式(Overriding Style)

1对档次的隐式转换

  重写样式属性类似于面向对象中的重写,其效力也类似于CSS中的样式覆盖。末了的外观取决于近来的体制也许性质。比如,给多个因素钦命了2个样式,在那之中饱含FontSize属性值为14。而在要素定义时,重新给它的品质FontSize设置了三个值18。最后成分文本的FontSize将为1八。

Brush, Color :  “#0000ff” “#ff0000ff” “25五,255,25五” 
“255,25伍,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: “1/10” “100” “zero” “auto”  十0  十0.五    
数字依旧百分比字符串转换,整形,浮点数据自动转换

 拓展样式(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般的话,大家愿意用户界面上的控件拥有统1外观,比如存有按钮大小相同、颜色相同等,这时大家得以定义1种因素的体制,对几个范围内的有着因素都使得,那正是因素类型样式。

            

  同一品种成分共享外观

 

  要是希望一个伍星级窗口内拥有的成分,具有同等的体裁和外观——能够那样完结:一.在伍星级窗口资源中定义四个体制,不标记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)由3有个别构成:设置器(Setter)、触发器(Triggers)、财富(Resources)。触发器,让体制的使用越来越可信、灵活和高速。触发器(Triggers)首要分为三类,属性触发器(检查从属属性即WPF成分本身性质)、数据触发器(检查任意可绑定的属性)、事件触发器(用于监听事件)。

一经写自定义控件,继承Wtf.Windows.Controls.Control
 然后重写InitializeComponent
把体制定义代码写在在这之中,即使再次无冕修改的话,能够重写覆盖。

属性触发器

dll一时不提供下载

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

金沙注册送58 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的值一样,不然掉不出来
 金沙注册送58 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>

金沙注册送58 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>

 数据触发器

  能够检查任意可绑定的质量,比如CLOdyssey对象属性、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地图