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>

     

  • 程序执行结果
  • 程序代码:https://files.cnblogs.com/files/TaiYangXiManYouZhe/TextBlockBasedOnStyle.rar
posted @ 2016-01-13 12:51  太阳系漫游者  阅读(2932)  评论(0编辑  收藏  举报