当定义的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. 梯度下降算法(gradient descent)

    简述 梯度下降法又被称为最速下降法(Steepest descend method),其理论基础是梯度的概念.梯度与方向导数的关系为:梯度的方向与取得最大方向导数值的方向一致,而梯度的模就是函数在该点 ...

  2. 关于树莓派Pi2通过UART连接攀藤G5传感器的python

    1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...

  3. 【leetcode刷题笔记】Insertion Sort List

    Sort a linked list using insertion sort. 题解:实现链表的插入排序. 要注意的地方就是,处理链表插入的时候尽量往当前游标的后面插入,而不要往前面插入,后者非常麻 ...

  4. linux FAQ(zz)

    1.Which is the command used to find the available shells in your Operating System Linux ? Ans : $ech ...

  5. HDFS常见问题

    在HDFS里面,data node上的块大小默认是64MB(或者是128MB或256MB) 问题: 为什么64MB(或128MB或256MB)是最优选择? 为什么不能远少于64MB(或128MB或25 ...

  6. poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】

    题目地址:http://poj.org/problem?id=3264 Sample Input 6 3 1 7 3 4 2 5 1 5 4 6 2 2 Sample Output 6 3 0分析:标 ...

  7. 2014暑假ACM13级一批集训内容

    2014 这个暑假,我大一的暑假来吧!!! 2014暑假ACM13级一批集训内容 集训期间时间安排: 周一到周六 上午:8:00-11:30 下午:2:00-5:30 晚上7:00-9:30 周日自由 ...

  8. MySQL部署时Table 'mysql.plugin' doesn't exist的解决

    今天部署了免安装版的MySQL,出现了Table 'mysql.plugin' doesn't exist的问题,苦恼了好久,终于在网上找到了解决方案,现整理一下给大家分享: 系统环境:Win10 6 ...

  9. Codeforces Round #256 (Div. 2) E. Divisors 因子+dfs

    E. Divisors time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  10. angularjs $http提交数据探索

    前两天在搞自己的项目,前端js框架用的是angularjs框架:网站整的差不多的时候出事了:那就是当我用$http.post()方法向服务器提交一些数据的时候:后台总是接收不到数据: 于是采用了其他方 ...