• wpf 样式继承


    当定义的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
  • 相关阅读:
    js高级程序设计 笔记 --- 引用类型
    es6 简单封装一个 省市县三级下拉框
    js中元素、触点等各种距离的总结
    css实现视觉差的滚动
    js的节流和防抖
    js关于原型,原型链的面试题
    深入理解promise
    vue 同一个组件的跳转, 返回时保留原来的下拉位置
    es6 封装一个登录注册的验证滑块
    洛谷P3203 [HNOI2010]弹飞绵羊(lct)
  • 原文地址:https://www.cnblogs.com/TaiYangXiManYouZhe/p/5125489.html
Copyright © 2020-2023  润新知