WPF-控件应用多个样式

 

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

 

方法一:使用BaseOn

注意:

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

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

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

 1     <!--导航栏按钮文字 - 选中后样式-->
 2     <Style x:Key="NavBtnPressedFontStyle">
 3         <Setter Property="TextBlock.HorizontalAlignment" Value="Center"/>
 4         <Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
 5         <Setter Property="TextBlock.FontFamily" Value="Microsoft Yahei"/>
 6         <Setter Property="TextBlock.FontSize" Value="26"/>
 7         <Setter Property="TextBlock.Foreground" Value="#ffffff"/>
 8     </Style>
 9     <!--左导航栏按钮 - 选中后样式-->
10     <Style x:Key="LeftNavBtnPressedStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource NavBtnPressedFontStyle}">
11         <Setter Property="Template">
12             <Setter.Value>
13                 <ControlTemplate TargetType="{x:Type Button}">
14                     <Grid>
15                         <Path x:Name="path" Data="M450,100 L400,50 550,50 600,100 z" Stretch="Fill" StrokeThickness="0" >
16                             <Path.Fill>
17                                 <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
18                                     <GradientStop Color="#7000f5ff" Offset="0"/>
19                                     <GradientStop Color="#6000f5ff" Offset="0.1"/>
20                                     <GradientStop Color="#5000f5ff" Offset="0.2"/>
21                                     <GradientStop Color="#4000f5ff" Offset="0.3"/>
22                                     <GradientStop Color="#3000f5ff" Offset="0.4"/>
23                                     <GradientStop Color="#3000f5ff" Offset="0.6"/>
24                                     <GradientStop Color="#4000f5ff" Offset="0.7"/>
25                                     <GradientStop Color="#5000f5ff" Offset="0.8"/>
26                                     <GradientStop Color="#6000f5ff" Offset="0.9"/>
27                                     <GradientStop Color="#7000f5ff" Offset="1"/>
28                                 </LinearGradientBrush>
29                             </Path.Fill>
30                         </Path>
31                         <ContentPresenter x:Name="content" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" 
32                                           SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
33                     </Grid>
34                     <ControlTemplate.Triggers>
35                         <Trigger Property="IsFocused" Value="True"/>
36                         <Trigger Property="IsDefaulted" Value="True"/>
37                         <Trigger Property="IsMouseOver" Value="True"/>
38                         <Trigger Property="IsPressed" Value="True"/>
39                         <Trigger Property="IsEnabled" Value="False"/>
40                     </ControlTemplate.Triggers>
41                 </ControlTemplate>
42             </Setter.Value>
43         </Setter>
44     </Style>

 

方法二:使用WpfMultiStyle

1.在Nuget搜索安装;

 2.在xaml页面引用;

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

 

 参考:[WPF]控件应用多个样式

 

posted @ 2020-06-19 18:18  橘子香气  阅读(1596)  评论(0编辑  收藏  举报