你的位置:首页 > ASP.net教程

[ASP.net教程]话谈样式(Style)


自学WPF后之前一直没项目上使用,结果今天有个小项目上使用了却又忘记了(很是烦恼),最后想想还是稍微写个笔记方便自己 日后复习!闲话少说还是进入主题:

当看到标题后想必大家都清楚接下来要做什么,对你很聪明 就是你想的那样~

说明:所有元素的style都可以由 FrameworkElement 或 FrameworkContentElement派生 出来。 样式通常声明为 Resources 部分中的资源。 由于样式是资源,它们遵守适用于所有资源的同一范围规则,因此,用于声明它可以应用的样式影响的位置。

       样式声明包含一个或多 Setter 对象集合的 Style 对象。 每 Setter 包括 Property 和 Value。 属性是元素的属性的名称该样式是应用于。 在样式声明为资源后,它可以引用与其他资源。

注意:如果存在多个 setter 集合的 setter 具有相同 Property 属性值,最后声明使用的 setter。 同样,因此,如果您直接设置相同的属性的值在样式和在元素中,元素设置的值直接优先。

样式的 Windows Presentation Foundation (WPF) 和模板化模型允许维护和共享查找以及表示和逻辑的分离。 该样式和模板化模型包含使您可以自定义 UI功能的套件。 以下功能套件包括 Style 类以及示:

  • Trigger

  • EventTrigger 和 Storyboard

  • ControlTemplate

  • DataTemplate

 

 1   >>基本Trigger 2  @basicTrigger 基本触发器 3   eg: 4   <Window.Resources> 5     <Style TargetType="CheckBox"> 6       <Style.Triggers> 7         <Trigger Property="IsChecked" Value="True"> 8           <Trigger.Setters> 9             <Setter Property="Foreground" Value="Orange"></Setter>10             <Setter Property="FontSize" Value="18"></Setter>11           </Trigger.Setters>12         </Trigger>13       </Style.Triggers>14     </Style>15   </Window.Resources>16 >>MultiTrigger(MultiConditionTrigger)17   @必须多个条件同时成立时才会触发18   eg:19   <Window.Resources>20     <Style TargetType="CheckBox">21       <Style.Triggers>22        <MultiTrigger>23           <MultiTrigger.Conditions>24             <Condition Property="IsChecked" Value="True"></Condition>25             <Condition Property="Content" Value="你来不来"></Condition>26           </MultiTrigger.Conditions>27           <MultiTrigger.Setters>28             <Setter Property="FontSize" Value="20"/>29             <Setter Property="FontWeight" Value="Bold"/>30           </MultiTrigger.Setters>31        </MultiTrigger>32       </Style.Triggers>33     </Style>34   </Window.Resources>35 >>由数据触发的DataTrigger36  实用案例:基于数据执行某些判断情况。37    说明:DataTrigger对象的Binding属性把数据不断送过来,38       当送来的值与Value属性的值一致,DataTrigger才会被触发。39  eg:40 <Window.Resources>41     <local:L2BConverter x:Key="L2BVal"/>42     <Style TargetType="TextBox">43       <Style.Triggers>44         <DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Text.Length,Converter={ StaticResource ResourceKey=L2BVal}}" Value="false">45           <Setter Property="BorderBrush" Value="Red"></Setter>46           <Setter Property="BorderThickness" Value="2"></Setter>47         </DataTrigger>48       </Style.Triggers>49       50     </Style>51   </Window.Resources>52 >>多数据条件触发的MultiDataTrigger53  @多条数据同时满足条件后才会执行54 >>由事件触发EventTrigger 55  @说明:是由事件触发 注意:触发后执行的是一段动画,并不是一组Setter56  eg:57  <Window.Resources>58     <Style TargetType="Button">59       <Style.Triggers>60         <EventTrigger RoutedEvent="MouseEnter">61           <BeginStoryboard>62             <Storyboard>63               <DoubleAnimation Duration="0:0:0.2" To="300" Storyboard.TargetProperty="Width"></DoubleAnimation>64             </Storyboard>65           </BeginStoryboard>66         </EventTrigger>67         <EventTrigger RoutedEvent="MouseLeave">68           <BeginStoryboard>69             <Storyboard>70               <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="Width"></DoubleAnimation>71             </Storyboard>72           </BeginStoryboard>73         </EventTrigger>74       </Style.Triggers>75     </Style>76   </Window.Resources>

 

 1 >> ControlTemplate 2 <Style TargetType="Button"> 3  <!--Set to true to not get any properties from the themes.--> 4  <Setter Property="OverridesDefaultStyle" Value="True"/> 5  <Setter Property="Template"> 6   <Setter.Value> 7    <ControlTemplate TargetType="Button"> 8     <Grid> 9      <Ellipse Fill="{TemplateBinding Background}"/>10      <ContentPresenter HorizontalAlignment="Center"11               VerticalAlignment="Center"/>12     </Grid>13    </ControlTemplate>14   </Setter.Value>15  </Setter>16 </Style>

 

>> DataTemplate<Page x:  

 Style.BasedOn 属性

 1 <Window x:Class="StyleBasedOn.MainWindow" 2     "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3     "http://schemas.microsoft.com/winfx/2006/xaml" 4     Title="MainWindow" Height="350" Width="525"> 5   <Window.Resources> 6     <Style x:Key="style1" TargetType="{x:Type Button}" > 7       <Setter Property="Background" Value="Yellow"></Setter> 8       <Setter Property="FontSize" Value="20"></Setter> 9     </Style>10     <Style x:Key="style2" TargetType="{x:Type TextBlock}">11       <Setter Property="Foreground" Value="Red"></Setter>12     </Style>13     <Style x:Key="style3" TargetType="{x:Type Button}" BasedOn="{StaticResource style1}">14       <Setter Property="FontStyle" Value="Italic"></Setter>15     </Style>16   </Window.Resources>17   <Grid>18     <StackPanel>19       <Button Width="100" Height="50" Click="Button_Click" Content="按钮" Style="{StaticResource style3}"></Button>20       <TextBlock FontSize="20" Tag="1" Style="{StaticResource style2}">变吧</TextBlock>21     </StackPanel>22   </Grid>23 </Window>

注意:1.每个样式只支持一个 BasedOn 值。

        2.如果您使用 TargetType 属性创建一个样式并根据它还定义一个 TargetType 属性的另一个样式,必须将与或从基样式的类型派生该派生的样式的对象类型。