1. 样式是属性值的集合,能被应用到一个元素,类似CSS,每个控件最多只能有一个样式,通过控件的Stype属性应用样式,如下代码,其中BigFontButtonStyle是用于检索资源的关键字,也可以通过代码指定样式:
    <Button Padding="5" Margin="5" Name="cmd"
    Style="{StaticResource BigFontButtonStyle}">
    </Button>
    cmd.Style = (Style)cmd.FindResource("BigFontButtonStyle");
    //样式指定为空
    <Button Padding="5" Margin="5" Style="{x:Null}">A Normal Button</Button>
  2. Style类一共有5个重要的属性:

    属性 描述
    Setters Setter或EventSetter对象的集合。用于自动地设置属性值和附着事件处理器。设置器只能改变依赖性属性,需要提供类和属性的名称,如果使用TargetType指定了所有属性应用的对象,则可以省略类名,只使用属性名
    Triggers TriggerBase对象的集合,并且允许你自动地改变样式设置。例如,当另一个属性改变时或当一个事件发生时,你能修改一个样式。
    Resources 你希望用于样式的资源集合。例如,有时需要用一个对象设置多个属性。在那种情况下,更有效的是创造对象作为一个资源,然后在你的设置器对象中使用那资源,而不是在每个设置器中,使用嵌套标签创造对象。
    BasedOn 一个属性,允许你创造一个更特殊的样式。此样式继承(和可选地覆盖)另一个样式的设置。
    TargetType 一个属性,识别样式所作用于的元素类型。此属性允许你创造仅影响某些元素的设置器,它允许你创造对于匹配的元素类型自动生效的设置器。
     
  3. 基于之前的样式建立一个新样式,使用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>
  4. 如果样式中的所有属性都应用到同类型的元素,可以设置TargetType属性,指出属性应用的类,可以注意Property的值没有类名。如果在窗口的Resources中定义的Style指定了TargetType为Button,则该窗口中所有的按钮将自动应用该样式,除非显示提供自己的样式。自动样式一般很少用
    <Style x:Key="BigFontButtonStyle" TargetType="Button">
    <Setter Property="FontFamily" Value="Times New Roman" />
    <Setter Property="FontSize" Value="18" />
    <Setter Property="FontWeight" Value="Bold" />
    </Style>
  5. 附加事件处理器: 表示TextBlock 发生MouseEnter时,执行element_MouseEnter代码
    <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><TextBlock Style="{StaticResource MouseOverHighlightStyle}">
    Hover over me.
    </TextBlock>
  6. 触发器:种类包括Trigger,MultiTrigger,DataTrigger,MultiDataTrigger和EventTrigger,下列代码表示当Control控件获得焦点时,把Control.Foreground设为DarkRed
    <Style.Triggers>
    <Trigger Property="Control.IsFocused" Value="True">
    <Setter Property="Control.Foreground" Value="DarkRed" />
    </Trigger>
    </Style.Triggers>
  7. DataTrigger:这种触发器使用数据绑定,监视绑定数据的变化
    <TextBlock.Style>
    <Style TargetType="{x:Type TextBlock}">
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
    <DataTrigger Binding="{Binding Text, ElementName=DescriptionTextBox}" Value="">
    <Setter Property="Visibility" Value="Visible"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding IsFocused, ElementName=DescriptionTextBox}" Value="true">
    <Setter Property="Visibility" Value="Collapsed"/>
    </DataTrigger>
    </Style.Triggers>
    </Style>
    </TextBlock.Style>
  8. 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>
  9. 事件触发器
    <Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
    。。。
    </EventTrigger>
    </Style.Triggers>
 

WPF 样式的更多相关文章

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

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

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

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

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

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

  4. WPF样式(Style)入门

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

  5. WPF样式——经典博客

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

  6. WPF样式学习三

    SnapsToDevicePixels 获取或设置在呈现过程,该值来确定呈现此元素是否应使用特定于设备的像素设置. 这是一个依赖项属性. true ,如果元素应以符合呈现到设备像素;否则, false ...

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

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

  8. 【转】【WPF】WPF样式(Style)—触发器

    样式(Styles)由三部分构成:设置器(Setter).触发器(Triggers).资源(Resources). (1)触发器,让样式的使用更加准确.灵活和高效. (2)触发器(Triggers)主 ...

  9. WPF 样式和行为

    样式(style):组织和重用格式化选项的重要工具,将细节如边距.字体.字号等信息封装起来,然后再需要的地方通过属性来应用样式. 行为(behavior):封装一些通用的UI行为,如拖动,缩放元素的代 ...

  10. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

随机推荐

  1. ubuntu下谷歌浏览器字体模糊解决方案

    一般来说,这种问题应该是缺少字体造成的,因此重新安装字体就可以解决问题. 1.双系统下,查找Windows C盘下:Windows/font/???? ???可在3中查找相应字体 2.分别双击安装那两 ...

  2. BZOJ 3105 线性基 高斯消元

    思路: 按照从大到小排个序 维护两个数组 一个是消元后的 另一个是 按照消元的位置排的 不断 维护从大到小 (呃具体见代码) //By SiriusRen #include <cstdio> ...

  3. ubuntu下安装VMware

    1 用apt-get命令更新系统 loginname@localhost:~$ sudo apt-get update 2 从官方网站下载Workstation11(Bundle Script) lo ...

  4. C# WebAPI小记

    新建WebAPI项目 新建一个Model 安装Entity Framework 添加连接字符串 去Web.config 中 <configuration> 节点中最下面添加 在Word中编 ...

  5. 移除HTML5 input在type="search"时的清除按钮

    input[type="search"]::-webkit-search-cancel-button { display: none; }

  6. 使用css选择器来定位元素

    public void CSS(){ driver.get(Constant.baidu_url); //绝对路径 // driver.findElement(By.cssSelector(" ...

  7. Pyhton学习——Day37

    # HTML# import socket## def main():# sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# sock. ...

  8. python的迭代器、生成器、三元运算、列表解析、生成器表达式

    一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...

  9. Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 作者:offbye 出处:http://blog.csdn.net/offbye/article/details/6592563 Git是使用branch来管理不 ...

  10. Java代码实现MySQL数据库的备份与还原

    通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...