WPF-控件应用多个样式

本文介绍了在WPF中如何引用多个样式,包括使用BaseOn方法,要求样式顺序和TargetType匹配,以及使用第三方库WpfMultiStyle来方便地为控件应用多个样式,无需关心控件类型限制。
摘要由CSDN通过智能技术生成

引用地址:https://www.cnblogs.com/zwh1993/p/13164482.html

WPF在使用样式的时候一般都是 Style="{StaticResource styleKey}",这里只能填一个样式,那么如何引用多个样式呢?

方法一:使用BaseOn

注意:

1.BaseOn所引用的样式一定要写在引用者的前面才有效;

2.所引用的样式的TargetType不能与引用者的TargetType不一致,但如果两者所应用的控件类型就是不一致怎么办,可在所引用的样式写Property时标注控件类型,例如行3-7中标注的TextBlock.

(而如果想不限定控件类型,使样式通用:不标注TargetType,在Property中标注Control.即可,例如<Setter Property="Control.FontSize" Value="26"/>)

<!--导航栏按钮文字 - 选中后样式-->
    <Style x:Key="NavBtnPressedFontStyle">
        <Setter Property="TextBlock.HorizontalAlignment" Value="Center"/>
        <Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
        <Setter Property="TextBlock.FontFamily" Value="Microsoft Yahei"/>
        <Setter Property="TextBlock.FontSize" Value="26"/>
        <Setter Property="TextBlock.Foreground" Value="#ffffff"/>
    </Style>
    <!--左导航栏按钮 - 选中后样式-->
    <Style x:Key="LeftNavBtnPressedStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource NavBtnPressedFontStyle}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Path x:Name="path" Data="M450,100 L400,50 550,50 600,100 z" Stretch="Fill" StrokeThickness="0" >
                            <Path.Fill>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                                    <GradientStop Color="#7000f5ff" Offset="0"/>
                                    <GradientStop Color="#6000f5ff" Offset="0.1"/>
                                    <GradientStop Color="#5000f5ff" Offset="0.2"/>
                                    <GradientStop Color="#4000f5ff" Offset="0.3"/>
                                    <GradientStop Color="#3000f5ff" Offset="0.4"/>
                                    <GradientStop Color="#3000f5ff" Offset="0.6"/>
                                    <GradientStop Color="#4000f5ff" Offset="0.7"/>
                                    <GradientStop Color="#5000f5ff" Offset="0.8"/>
                                    <GradientStop Color="#6000f5ff" Offset="0.9"/>
                                    <GradientStop Color="#7000f5ff" Offset="1"/>
                                </LinearGradientBrush>
                            </Path.Fill>
                        </Path>
                        <ContentPresenter x:Name="content" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True"/>
                        <Trigger Property="IsDefaulted" Value="True"/>
                        <Trigger Property="IsMouseOver" Value="True"/>
                        <Trigger Property="IsPressed" Value="True"/>
                        <Trigger Property="IsEnabled" Value="False"/>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

 

方法二:使用WpfMultiStyle

1.在Nuget搜索安装;

 2.在xaml页面引用;

3.在控件中同时使用多个样式,写法类似于 HTML 中 class="class1 class2 class3",非常方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值