当定义的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. CSS 布局实例系列(四)如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?

    Hello,小朋友们,还记得我是谁吗?对了,我就是~超威~好啦,言归正传,今天的布局实例是: 实现一个浮动布局,红色容器中每一行的蓝色容器数量随着浏览器宽度的变化而变化,就如下图: 肯定有人心里犯嘀咕 ...

  2. matlab常用的一些程序和功能

    ~ 去除误匹配算法(matlab) 1.ransac算法 [tform,matchedPoints1,matchedPoints2] = ...    estimateGeometricTransfo ...

  3. C#线程使用学习

    线程的入口函数可以不带输入参数,也可以带输入参数: form1.cs using System; using System.Collections.Generic; using System.Comp ...

  4. HDU - 5550 Game Rooms 【DP+前缀和】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5550 题意 一撞大楼有N层楼,然后每层楼都有一部分人喜欢打羽毛球,一部分人喜欢打乒乓球 但是每层楼只能 ...

  5. 【转】kalman滤波

    Kalman Filter是一个高效的递归滤波器,它可以实现从一系列的噪声测量中,估 计动态系统的状态.广泛应用于包含Radar.计算机视觉在内的等工程应用领域,在控制理论和控制系统工程中也是一个非常 ...

  6. Effective java -- 8 异常

    第五十七条:只针对异常的情况才使用异常应该都有这个意识吧,就像什么抓索引越界什么的,没有必要. 第五十八条:对可恢复情况使用受检查异常,对编程错误使用运行时异常三种可抛的异常:受检的异常(checke ...

  7. 图形用户界面(GUI)事件监听机制——窗体事件Frame

    窗体事件.Button的使用 本事例给出一个窗体的定义方法,基本属性设置,给窗体添加退出按钮,让按钮具备退出的功能.熟悉监听器的使用 按钮就是事件源. 那么选择哪一个监听器呢? 通过关闭窗体事例了解到 ...

  8. BootStrap实现左侧或右侧竖式tab选项卡

    BootStrap实现左侧或右侧竖式tab选项卡 代码如下: <div style="height: 100px;"> <div class="col- ...

  9. webpack打包笔记

    optimist是一个node库,将webpack.config.js与shell参数整合成options对象 options对象包含之后构建的重要信息,类似于webpack.config.js we ...

  10. [算法]旋转矩阵问题(Spiral Matrix)

    题目一: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spir ...