【美高梅开户网址】WPF样式和行为,样式的应用

Wtf(一时半刻命名,随便起的 =
_=),模仿WPF的框架,还平昔不两全,唯有简单的根基成分,协理数据绑定。纵然协助mono可是mono有bug

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

      
前边简而言之到了wpf中二种体制的用法,wpf有着周边web中的CSS一样,为界面上的因素定制外观,以提供更加好的用户界面,那种灵活性也是winForm所不能够及的,从眼下讲到的能够知晓在WPF应用程序中,通过控件的性质,大家也得以完毕转移控件的外观。然而,这种措施局限性大、不灵活且不便宜维护,比如1个,3个按钮的体裁能够那样,要是有二10,三二十个,甚至更加多,难道也如此吗,明显那不是很好的取舍,如若大家将上述控件的习性归结起来,写到壹段样式中,为按钮内定该样式(甚至用成分类型样式时,都不须求钦点按钮样式),全部按钮就持有合并样式和外观了。假设想修改按钮外观,大家只供给改一下体制代码即可,全部按钮外观都会跟着变化。

WPF专业编制程序指南 美高梅开户网址 1

写那些只是兴趣爱好,感觉也没多大意义了,若是那一个UI框架完善了,有微微人甘愿用?毕竟Windows上有WPF,而且C#跨平台必要也不多啊。我对WPF也不算熟习,要通盘的话,还有好多要写。一大堆常用控件和设计器。不过本人并非XML来叙述,而是直接用C#来定义,设计器直接生成C#代码,因为本身觉着,如若有无往不胜的设计器,写XML正是剩下的,而且解析XML还影响属性,对于WPF,作者以为Xaml太啰嗦了。

行为封装1些基本的UI功效,然后用1两行标记附加到成分上,完毕效益。

体制的利用有各类措施,如内联样式(定义在要素内部)、已命名样式(为样式命名,使用时通过名称引用)、成分类型样式(为壹连串型的因素,内定一种体裁)等等。

定价 : ¥68.00

 

体制基础

体制是一种重要的财富。

体制是属性值的成团,能被使用到二个因素。就好像CSS,WPF样式允许你定义格式化天性并且遍及应用程序地运用它们去保险一致性。就像是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>

那段标记创建单个财富:1个System.Windows.Style对象。样式对象具备一个设置器集合,带有3设置器对象,每种设置器设置一个属性。各种设置器对象提议要设置属性的名字。和该属性的值。就如全部的财富,样式对象有1个用来检索能源的显要字。在本例中,关键字是BigFontButtonStyle。(依照预订,样式关键字的尾声是Style。)

美高梅开户网址,每一个WPF成分只好利用三个体制(或能够不利用样式)。一个因素通过Style属性应用样式。例如,为布局3个按钮使用你此前创制的体制,按钮像这么应用样式财富:

<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 一个属性,识别样式所作用于的元素类型。此属性允许你创造仅影响某些元素的设置器,它允许你创造对于匹配的元素类型自动生效的设置器。

壹、内联样式

会员价

¥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一(7五折)
本书样章免费试读:

属性写法:

安装属性

如您所见,每种Style对象包裹三个Setter对象的聚众。每一个Setter对象设置一个要素的叁特品质。唯壹限制是三个设置器只可以改成1个依靠属性—无法修改其余属性。

在1部分处境下,你不可能动用一个简短的字符串设置属性值。例如,不可能选拔一个简易字符串创制八个ImageBrush对象。在这种景色下,你能用五个嵌套元素设置属性。那是一个事例:

<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
上架时间:二零零六-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来定义样式。可是缺点也是明显的,即使有多少个那样的控件指向同一个样式,该如何是好吧,只可以各样都要写,所以很倒霉,所以大家得以在财富中定义四个体裁,然后让四个控件调用那叁个样式即可

【编辑推荐】
八面见光系统,深刻应用
通俗易懂,实例丰富

        /// <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属性使他们相关联。

2、已命名样式

【内容简介】
《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属性为空。

 将同1的内敛样式归咎起来,放入能源中,构成一个体裁,并为它起2个名字。那样,就足以由此名称为要素钦定该样式。

目录

第一篇 WPF编制程序基础
第三章 WPF应用程序 二
1.一 WPF应用程序的开创 二
1.2 Dos窗口 3
一.三 WPF应用程序的启航和终止 四
一.四 输入参数 伍
1.5 在Xaml中创建Application 7
一.陆 窗口大小 十
一.柒 互连网应用程序 十
壹.8 应用程序的不得了处理 11
一.九 应用程序中的能源 1贰
一.10 应用程序的通知 一3
一.1壹 WPF开发条件 1四
一.1贰 本章小结 一伍
第2章 XAML语言 16
二.一 XAML是一种界面描述语言 16
2.2 XAML的根成分 1七
2.三 XAML命名空间(NameSpace) 17
二.肆 XAML和代码分离技术(code behind) 1八
2.5 子元素 19

.二.六 相关属性(Dependency Property) 20
贰.7 附加属性(Attached Property) 二一
二.八 XAML符号扩大 二1
二.8.一 静态财富扩展(StaticResourceExtension) 22
二.捌.二 动态能源扩大(DynamicResourceExtension) 2三
贰.八.三 数据绑定扩张(Binding) 二4
二.八.肆 相对数据源扩充(RelativeSource) 二4
二.八.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
二.九 本章小结 二7
【美高梅开户网址】WPF样式和行为,样式的应用。第3章 WPF排版 28
三.一 排版基础 28
三.二 堆积面板(StackPanel) 2九
3.3 WrapPanel 34
3.四 停靠面板(DockPanel) 35
三.伍 表格式面板(Grid) 3九
三.5.1 设定UI元素在Grid中的地点 40
三.五.二 设定Grid行或列的尺寸 40
三.伍.3 成分横跨多少个体系时的设定 四一
3.5.四 在Grid中保持多行或多列大小的一致性 4四
3.6 UniformGrid 46
三.7 画布面板(Canvas) 47
三.八 本章小结 4八
第陆章 WPF中的属性系统 4九
4.1 CLR属性 49
4.二 相关属性的概念 50
四.贰.一 相关属性的传递 50
四.二.二 WPF对有关属性的支撑 5壹
4.三 自定义相关属性 52
四.四 附加属性 5八
肆.伍 本章小结 陆七
第伍章 画笔和画刷 6捌
5.一 WPF中的颜色 6捌
5.2 画刷 75
5.二.1 实心画刷(SolidColorBrush) 7陆
五.二.二 梯度画刷(GradientBrush) 7七
5.二.三 线性梯度画刷(LinearGradientBrush) 77
五.贰.4 圆形梯度画刷(RadialGradientBrush) 80
伍.2.5 自制画刷(DrawingBrush) 81
伍.二.陆 粘贴模式(TileMode) 八二
5.2.七 伸展情势(Stretch) 83
伍.2.八 图像画刷(ImageBrush) 八3
五.贰.九 控件画刷(VisualBrush) 85
5.3 画笔 88
伍.4 本章小结 九伍

其次篇 WPF专业程序员必备
第6章 WPF控制 98
六.一 WPF控件概述 九8
六.二 内容控件(Content Control) 拾0
陆.二.1 框架控件(Frame) 100
6.2.2 WPF按钮(Button) 101
陆.贰.三 拨动按钮(ToggleButton) 10四
6.2.4 CheckBox控件 104
6.2.5 RadioButton控件 104
陆.贰.6 重复按钮(RepeatButton) 拾5
陆.贰.七 带有标题栏的内容控件(HeaderedContentControl) 拾陆
6.2.8 分组框(GroupBox) 107
陆.二.玖 伸展控件(Expander) 拾玖
陆.二.十 标签控件(Label) 110
六.二.1一 为按钮设置热键 11一
6.2.12 ToolTip 113
6.2.13 ScrollViewer 115
六.三 条目控件(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
陆.叁.玖 树形控件TreeView和TreeViewItem 140
6.四 文本控件(Text Controls) 1四三
6.四.一 口令输入框(PasswordBox) 1四3
陆.四.二 文字输入框(TextBox) 14肆
6.4.3 RichTextBox 145
6.伍 范围控件(Range Controls) 1肆6
6.5.1 滚动条(ScrollBar) 146
6.5.2 滑动条(Slider) 147
6.5.3 进展条(ProgressBar) 152
6.陆 本章小结 152
第八章 传递事件和传递命令系统 15三
7.一 WPF中的元素树 153
7.贰 传递事件(Routed 伊夫nt) 1陆伍
7.2.1 RoutedEventArgs 166
7.二.2 终止事件传播 16六
7.二.叁 处理传递事件 16柒
7.二.4 附加传递事件(Attached Routed 伊夫nt ) 16八
柒.三 侦察传递事件 16捌
七.3.一 键盘事件的爆发和传递 174
柒.四 自定义传递事件 17四
七.五 管理键盘和鼠标输入事件 1捌二
七.5.一 键盘输入 1八二
7.5.二 鼠标输入 18二
七.陆 传递命令 18四
7.6.1 ICommand接口 186
7.6.2 ICommandSource接口 186
7.6.3 CommandTarget 186
七.6.四 命令绑定(CommandBinding) 1八陆
七.六.5 传递命令(Routed Command) 18七
七.六.陆 WPF命令仓库(Command Repository) 187
柒.七 本章小结 190
第8章 资源 191
八.壹 能源定义及其类型 1玖一
八.2 统一能源标识(Unified Resource Identifier) 1玖贰
八.三 .NET开发平台对财富国际化的帮助 1九陆
8.三.一 WinForm下的财富管理 197
8.3.2 用XAML成立本地能源 200
捌.四 WPF成分中定义的能源 20二
八.4.1 静态财富(StaticResource) 20三
八.四.2 能源的功用范围 20肆
八.四.三 静态扩张标识(Static markup extension) 20伍
捌.4.四 动态能源扩大标识(DynamicResource 马克up Extension) 208
八.五 本章小结 二10
第9章 风格 211
9.1 Style类 211
9.2 Setters 211
9.3 TargetType 215
9.4 BasedOn 218
9.5 触发器(Triggers) 220
玖.5.一 使用单一条件的触发器 2二壹
九.伍.二 使用三个原则的触发器 22二
九.5.叁 使用数据触发器(DataTrigger) 2二3
九.陆 风格中的能源 2二伍
9.7 IsSealed 227
玖.捌 把作风定格定义在单身的文本中 2二柒
9.玖 在FrameworkContentElement中使用风格 22八
9.10 再谈Setter属性 229
⑨.11 本章小结 230
第10章 模板 231
十.一 模板概述 231
10.2 控件模板 23贰
10.二.一 在控件中使用模板 23二
拾.2.二 在能源中利用模板 23四
拾.贰.三 在控件模板中央银行使TargetType 23五
10.二.四 在模板中显得控件的始末 23陆
拾.2.5 在模板中利用ContentPresenter 2三7
10.二.六 模板兰月素名Name属性 23九
10.2.7 在模板中绑定控件的别样属性 23九
10.二.捌 使用模板显示电力系统的断路器和刀闸开关 240
十.贰.九 在作风中接纳模板 24二
10.二.10 获取WPF控件的沙盘 二四叁
拾.3 数据模板(DataTemplate) 244
10.三.1 我们所面临的题材 24肆
十.3.二 定义数据模板 247
拾.叁.3 在能源中采纳数据模板 24八
10.三.四 数据模板触发器 24九
拾.三.伍 依据数据属性选用相应的模板 250
十.三.六 在多少模板中动用类型转换技术 25三
10.4 ItemsPanelTemplate 258
拾.五 层次结构数据模板(HierarchicalDataTemplate) 25九
10.陆 本章小结 262
第3一章 数据绑定(Data Binding) 二陆3
1壹.一 数据绑定概述 263
1一.2 最简便的数据绑定——从界面成分到界面成分 26四
11.2.一 壹对一多少绑定 264
11.2.2 在C#中,完结数量绑定 265
11.二.3 对不是FrameworkElement和FrameworkContentElement元素达成数量绑定
26陆
1一.三 使用分化的绑定方式 26陆
1一.肆 动态绑定 二陆七
1一.五 最简易的数量绑定——从.NET对象到界面成分 26八
11.6 DataContext 271
1一.7 控制绑定时刻 27贰
1一.八 开发自身的IValueConverter 27三
11.九 在数码绑定中投入校验 275
1一.玖.1 开发业务规则类 27六
1一.玖.二 在绑定中拉长任意多少个业务规则 279
1一.玖.3 在控件上海展览中心示校验信息 27玖
1壹.玖.肆 触发错误处总管件 280
11.9.伍 清除控件上的错误音讯 2八2
1一.十 对聚集对象的绑定 2八3
11.10.1 使用DisplayMemberPath属性 286
11.十.二 展现当前条目 2八六
11.10.3 遍历集合中的记录 28八
1一.10.肆 增添或删除记录 290
1一.十.伍 对聚集对象分组 2九三
1一.10.陆 对聚集对象排序 2九四
1一.十.7 对聚集对象过滤 295
11.11 数据源 296
11.11.1 XML数据源 296
1壹.1一.贰 .NET对象数据源 30一
11.12 层次结构数据的绑定 30三
1壹.一三 本章小结 30三
第一二章 窗口对话框和打印 30肆
12.1 窗口(Window) 304
12.一.一 窗口的意况变化和事件 304
1二.一.贰 分明视窗的义务 30九
1二.一.3 显著视窗的尺寸 310
1贰.1.肆 视窗状态属性(WindowState) 3十
1二.1.5 视窗大小方式(ResizeMode) 310
1贰.一.6 视窗风格(WindowStyle) 31壹
12.2 网页(Page) 311
1贰.二.一 创立网页 31二
12.2.2 KeepAlive属性 312
12.2.3 NavigationService属性 312
12.2.4 ShowsNavigationUI属性 313
12.3 浏览窗口(NavigationWindow) 31三
1二.三.1 使用统壹风格 31四
12.3.2 设置NavigationWindow的标题 314
12.三.叁 浏览网页 31伍
12.3.4 使用HyperLink类 315
12.3.五 使用NavigationService转到区别的网页 318
1二.叁.陆 使用浏览日志转换成不相同的网页 31玖
1二.3.7 浏览窗口的浏览事件 31九
12.4 对话框(DialogBox) 320
12.4.1 消息框(MessageBox) 320
1贰.肆.2 通用对话框 320
1二.四.叁 自定义对话框 32二
1贰.伍 打字与印刷输出 3二3
1二.5.1 XPS 文书档案简介 32三
12.5.2 创建XPS文档 324
12.5.3 显示XPS文档 328
12.5.4 打印 333
1二.6 本章小结 33三

其叁篇 图形和卡通片
第三叁章 2维图形 336
一三.1 WPF图形系统概述 33六
1三.1.1 统一编制程序模型 33陆
壹三.壹.二 坐标类别 33八
13.1.3 Shape 和Geometry 338
①三.2 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
壹三.2.6 填充规则(FillRule) 34二
13.2.7 路径(Path) 343
1三.3 吉优metry及其派生类 3四三
13.3.1 直线(LineGeometry) 344
13.3.2 矩形(RectangleGeometry) 344
13.3.3 椭圆(EllipseGeometry) 344
1三.叁.4 几何图形组(吉优metryGroup) 3肆伍
1三.三.5 合并图形(Combined吉优metry) 3四陆
一三.3.陆 几何途径(Path吉优metry) 34八
一三.三.7 分段路径(PathSegment) 350
13.3.8 弧线(ArcSegment) 350
13.3.9 直线段(LineSegment) 352
13.3.10 折线段(PolyLineSegment) 353
13.3.11 柏之线(BezierSegment) 353
一3.3.1二 多段柏之线(PolyBezierSegment) 35四
一三.三.一三 一回柏之线(QuadraticBezierSegment) 354
一三.三.1四 多段一遍柏之线(PolyQuadraticBezierSegment) 355
一三.三.壹5 Mini绘图语言 356
壹三.三.1陆 流几何图形(Stream吉优metry) 360
13.4 绘制(Drawing) 361
一3.四.壹 使用DrawingImage展现几何图形 362
一三.四.二 使用DrawingVisual来体现几何绘制 3陆三
13.4.3 创建DrawingVisual宿主 363
一三.四.4 绘制几何图形 364
一叁.肆.伍 把DrawingVisual对象加到FrameworkElement中的视觉树和逻辑树中 36四
一三.四.陆 采纳视觉成分(Visual Hit Testing) 36陆
一三.4.柒 简单选拔判断 36陆
1三.四.捌 多个视觉成分的选取判断 3陆七
1三.4.九 视觉成分重叠时的选项判断 3六七
壹叁.5 本章小结 36八
第1肆章 图形转换 36九
14.一 图形转换概述 36九
1四.2 项目管理器 370
14.叁 旋转转换(RotateTransform) 376
1四.四 位移转换(TranslateTransform) 37八
1四.5 缩放转换(ScaleTransform) 380
1四.陆 扭曲转换(SkewTransform) 3捌2
1四.七 组合转换(TransformGroup) 38四
14.八 矩阵转换(MatrixTransform) 38五
1四.八.一 矢量操作 385
14.8.2 H坐标系 386
1四.八.三 位移转换矩阵 3八柒
14.捌.4 旋转转换矩阵 38八
1四.捌.五 缩放转换矩阵 388
1四.8.陆 扭曲转换矩阵 38九
14.8.7 矩阵操作 38玖
14.玖 本章小结 3玖四
第15章 动画 395
一5.一 WPF中的动画 3玖5
一伍.二 动画类继承树 396
15.三 一个不难的动画 3玖七
一伍.四 控制动画 3玖捌
一五.肆.一 动画所用的时刻(duration) 39玖
一五.四.2 设定动画起头时间BeginTime 39九
15.4.叁 设定自动回到(AutoReverse) 39九
一5.四.4 设定动画速度(SpeedRatio) 400
一5.4.伍 加速和减速动画(AccelarationRatio和DecelarationRatio) 400
1伍.四.六 设定动画的重新性格(RepeatBehavior) 402
一伍.4.七 设定动画的结束情况(FillBehavior) 40二
15.四.捌 设定相关属性的卡通片范围(From和To) 40二
一伍.肆.九 设定相关属性的动画范围(By) 403
15.4.10 设定IsAdditive和IsCumulative 属性 403
一5.四.1一 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
壹五.柒 本章小结 41陆
第四篇 开发WPF产品
第一陆章 多媒体技术及其应用 41八
16.一 播放.wav声音格式的SoudPlayer和SoundPlayerAction 41捌
16.1.1 装载.wav文件 418
16.1.2 播放.wav文件 419
1陆.1.三 停播 41玖
16.1.4 在XAML中使用SoundPlayerAction 419
1六.二 播放各样格式的音响和图像 420
1陆.2.1 播放格局 4二一
16.2.2 使用MediaPlayer实例 422
16.2.3 使用MediaElement和MediaTimeline实例 426
1陆.三 语音合成和话音识别 430
1陆.3.① 尝试Windows Vista的话音功效 43一
16.叁.贰 使您的顺序发音 43二
16.3.3 PromptBuilder和SSML 433
1六.3.四 语音识别中的语法 43四
16.4 本章小结 436
第一7章 定制控件和排版 43柒
1七.一 用户控件和自定义控件 四三⑦
一柒.2 创造用户控件(User Control) 43玖
壹七.二.1 设计用户控件UI 43玖
17.二.2 开发扶助用户控件UI的逻辑 44二
17.三 创建自定义控件(Custom Control) 4四6
1七.肆 创设自定义排版(Custom Panel) 45玖
一柒.肆.1 照片浏览器 4⑥一
17.伍 本章小结 47一
第1捌章 综合应用 472
1八.壹 Ribbon界面大概浏览 47贰
18.贰 项指标团伙 47三
18.3 管理Generic.XAML文件 475
1捌.四 开发自定义控件 47陆
1八.肆.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
18.四.十 协理分裂皮肤 51四
1八.5 使用Ribbon自定义控件实例 51陆
1八.6 本章小结 525
参考文献 5二陆

属性上的表征能够是 PropertyMetadata也许UIPropertyMetadata
中的3个,暗中同意值能够通过这八个特点来安装。如果不加那两天性子,那暗许值正是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集合中的设置器被选拔。(不幸地,无法选用更世故的触发器逻辑,相比叁个值落在一个范围内,执行三个测算,等等。在这一个情形下,你应转而选取一个轩然大波处理器。)

那里是2个触发器,当按钮得到键盘主旨时,背景变为暗中蓝:

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

不须要写逻辑反转触发器。触发器甘休使用,元素就苏醒它的常规的外观。

触发器未有改动重视属性的原始值。原始值恐怕是地面值,也也许是样式值。触发器一失活,触发之前的值就再一次可用。

触发器集合能够包含七个触发器。假诺,三个之上的触发器修改同一个天性,位于列表最后的触发器赢。

它不爱慕哪一个触发器头阵生。例如,WPF不关切在你点击按钮从前三个按钮是不是获得宗旨。触发器被排列在你标记中的地点是它唯1关怀的事。

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能够将Style一钦赐给那些控件也是适量的。那样就能使三种因素共用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能够选用Style一,而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一同时内定给CheckBox一和TextBlock壹,TextBlocak会自动忽略不适用它们本身的体制属性IsChecked。而两岸公有的品质(比如Foreground、FontSize),不论加不加前缀,对两端都有效。

 

重写样式(Overriding Style)

有个别种类的隐式转换

  重写样式属性类似于面向对象中的重写,其效果也周边于CSS中的样式覆盖。最后的外观取决于近日的体裁大概性质。比如,给三个要素钦命了二个体制,在那之中蕴含FontSize属性值为14。而在要素定义时,重新给它的质量FontSize设置了多个值18。最后成分文本的FontSize将为1八。

Brush, Color :  “#0000ff” “#ff0000ff” “255,255,25五” 
“255,255,255,25伍”  颜色字符串转换,按梯次是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: “一成” “100” “zero” “auto”  拾0  100.伍    
数字依然百分比字符串转换,整形,浮点数据自动转换

 拓展样式(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>

 

3、成分类型样式

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

 一般的话,大家期望用户界面上的控件拥有统一外观,比如存有按钮大小一样、颜色相同等,那时大家能够定义1种成分的体制,对二个范围内的具备因素都使得,那就是因素类型样式。

            

  同1品种成分共享外观

 

  倘诺希望一个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)主要分为三类,属性触发器(检查从属属性即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的值一样,不然掉不出去
 美高梅开户网址 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>

 数据触发器

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