当定义的wpf多个样式,其样式内容(属性、触发器等)有较多的重复时,可以考虑将其抽象成父样式,来提升样式代码的可维护性以及减少代码冗余。

wpf 进行样式继承时,需要使用style的BasedOn属性。msdn的介绍参见:https://msdn.microsoft.com/en-          us/library/system.windows.style.basedon(v=vs.110).aspx

下面介绍一个样式继承的简单场景,并附以代码示例。

  • 场景简介。假设系统中要求按钮的字体需全部为黑体,14号,文字色为蓝色。后来项目经理要求在按钮样式的基础上,增加右靠齐的按钮。

很明显,系统中要存在两种样式的按钮,出去文字靠齐方式之外,其他样式全部相同,用按钮样式的继承来解决这个问题就非常合适了。

  • 1 思路:可以设计3中按钮的样式

    • ButtonBaseStyle。按钮样式的基类
    • DefaultButtonStyle。默认的按钮样式。【注】若要运用全局样式,则style不能设置x:Keyshuxing。
    • ContentPadLefButtonStyle。内容右靠齐的按钮样式。
  • 2 代码
  • 在项目中添加资源字典文件,命名为ButtonAssets.xaml
  • 在资源字典中新建ButtonBaseStyle样式
  1. <Style x:Key="ButtonBaseStyle" TargetType="Button">
    <Setter Property="FontWeight" Value="Bold"></Setter>
    <Setter Property="FontSize" Value="14"></Setter>
    <Setter Property="Foreground" Value="Blue"></Setter>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>
  • 使用样式继承,新建默认样式

    <Style TargetType="Button" BasedOn="{StaticResource ButtonBaseStyle}"></Style>
  • 使用样式继承,新建右靠齐样式
        <Style x:Key="ContentPadLefButtonStyle" TargetType="Button" BasedOn="{StaticResource ButtonBaseStyle}">
    <Setter Property="HorizontalContentAlignment" Value="Right"/>
    </Style>
  • 在工程的App.xaml中引用资源字典
        <Application.Resources>
    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/TextBlockBasedOnStyle;component/ButtonAssets.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    </Application.Resources>
  • 创建不同的按钮,引用样式。默认样式按钮,无需引用默认样式,程序在运行时,会附加DefaultButtonStyle
        <Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="5*"/>
    <ColumnDefinition Width="5*"/>
    </Grid.ColumnDefinitions>
    <Button Width="100" Content="默认样式" Height="40"></Button>
            <Button Style="{StaticResource ContentPadLefButtonStyle}" Content="右靠齐样式" Width="100" Height="40"   Grid.Column="1"></Button>
    </Grid>
  • 程序执行结果
  • 程序代码:http://files.cnblogs.com/files/TaiYangXiManYouZhe/TextBlockBasedOnStyle.rar

wpf 样式继承的更多相关文章

  1. WPF样式继承

    场景:样式A和样式B的背景颜色一样,但是文字颜色不一样 <Style x:key="BaseStyle" TargetType="Button"> ...

  2. WPF 精修篇 样式继承

    原文:WPF 精修篇 样式继承 这个 是新知识 样式可以继承 <Style x:Key="TextBlockStyleBase" TargetType="{x:Ty ...

  3. WPF 样式和行为

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

  4. [WPF疑难] 继承自定义窗口

    原文 [WPF疑难] 继承自定义窗口 [WPF疑难] 继承自定义窗口 周银辉 项目中有不少的弹出窗口,按照美工的设计其外边框(包括最大化,最小化,关闭等按钮)自然不同于Window自身的,但每个弹出框 ...

  5. windows phone (13) 样式继承

    原文:windows phone (13) 样式继承 在上一遍文章中已经介绍到可以在Resources集合中定义样式,我们也可以在一个样式上引用其他的样式,这就是继承的概念,使用方法是将引用的样式放置 ...

  6. WPF样式(Style)入门

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

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

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

  8. css004 用样式继承节省时间

       css004 用样式继承节省时间 继承:inherit 继承可以简化样式表 继承是有局限的,有些样式没法继承,如:border,width,height

  9. 《CSS3实战》读书笔记 第4章:样式继承

    节省你的时间--样式继承 ### 什么是继承? 后代元素可以继承先代元素的一些属性.有了它,可以省去分别定义样式的时间.继承了方向是由外而内的. ### 继承的局限性 应该注意到,有些属性是不适宜继承 ...

随机推荐

  1. Android笔记之使用ZXing扫描二维码

    ZXing发布版下载地址:https://github.com/zxing/zxing/releases 为了能让官方Demo跑起来,先把ZXing核心部分core复制到自己的工程里 还要把andro ...

  2. Meeting-in-the-Middle (LA 2965)

    Meeting-in-the-Middle,又称“中途相遇法”.准确地说,它只是一种策略. 顺便说一下,这个算法真的很冷门! 结合这道题来讨论一下吧:LA 2965.ε(┬┬﹏┬┬)3 因为博主的英文 ...

  3. 北京君正集成电路的Newton平台--穿戴式

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/hellomxj1/article/details/25324125   Newton1开发平台 • 很适合 ...

  4. 电脑Svchost.exe 进程占CPU100% 的解决办法

    Windows Update诊断和修复修复工具 http://support.microsoft.com/mats/windows_update/zh-cn Svchost.exe占用CPU100%的 ...

  5. Spring注解式与配置文件式

    http://tom-seed.iteye.com/blog/1584632 Spring注解方式bean容器管理 1.通过在配置文件中配置spring组件注入 <context:compone ...

  6. Spring MVC 通过反射将数据导出到excel

    直接上代码 // 导出excel方法 @RequestMapping("exportExcel") public void exportExcel(HttpServletReque ...

  7. error when start pyspark

    ERROR spark.SparkContext: Error initializing SparkContext.java.lang.IllegalArgumentException: Requir ...

  8. 【leetcode刷题笔记】Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 解题:设定一个变量 ...

  9. 光流法跟踪fast角点思路

    光流法需要include<opencv2/video/tracking.hpp>,用到列表,所以要include<list><vector>1.读取文件定义图像存储 ...

  10. zookeeper 配置文件注释

    tickTime=2000 initLimit=5 syncLimit=2 dataDir=/opt/shencl/zookeeper/data/data0 dataLogDir=/opt/shenc ...