标签:
自学WPF后之前一直没项目上使用,结果今天有个小项目上使用了却又忘记了(很是烦恼),最后想想还是稍微写个笔记方便自己 日后复习!闲话少说还是进入主题:
当看到标题后想必大家都清楚接下来要做什么,对你很聪明 就是你想的那样~
说明:所有元素的style都可以由 FrameworkElement 或 FrameworkContentElement派生 出来。 样式通常声明为 Resources 部分中的资源。 由于样式是资源,它们遵守适用于所有资源的同一范围规则,因此,用于声明它可以应用的样式影响的位置。
样式声明包含一个或多 Setter 对象集合的 Style 对象。 每 Setter 包括 Property 和 Value。 属性是元素的属性的名称该样式是应用于。 在样式声明为资源后,它可以引用与其他资源。
注意:如果存在多个 setter 集合的 setter 具有相同 Property 属性值,最后声明使用的 setter。 同样,因此,如果您直接设置相同的属性的值在样式和在元素中,元素设置的值直接优先。
样式的 Windows Presentation Foundation (WPF) 和模板化模型允许维护和共享查找以及表示和逻辑的分离。 该样式和模板化模型包含使您可以自定义 UI功能的套件。 以下功能套件包括 Style 类以及示:
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 >>由数据触发的DataTrigger 36 实用案例:基于数据执行某些判断情况。 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 >>多数据条件触发的MultiDataTrigger 53 @多条数据同时满足条件后才会执行 54 >>由事件触发EventTrigger 55 @说明:是由事件触发 注意:触发后执行的是一段动画,并不是一组Setter 56 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:Class="WpfBrowserApplication1.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:System.Collections;assembly=mscorlib" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="Page1"> <Page.Resources> <DataTemplate x:Key="itemTemplate"> <CheckBox Name="cb" Content="{Binding}"></CheckBox> </DataTemplate> </Page.Resources> <Grid> <ListBox ItemTemplate="{StaticResource itemTemplate}"> <ListBox.ItemsSource> <c:ArrayList> <sys:DateTime>1987-10-21</sys:DateTime> <sys:DateTime>1987-10-21</sys:DateTime> <sys:DateTime>1987-10-21</sys:DateTime> <sys:DateTime>1987-10-21</sys:DateTime> <sys:DateTime>1987-10-21</sys:DateTime> </c:ArrayList> </ListBox.ItemsSource> </ListBox> </Grid> </Page> 添加:Style Triggers <Page.Resources> <DataTemplate x:Key="itemTemplate"> <CheckBox Name="cb" Content="{Binding}"></CheckBox> </DataTemplate> <Style TargetType="{x:Type CheckBox}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="IsChecked" Value="true"></Setter> <Setter Property="Foreground" Value="red"></Setter> </Trigger> </Style.Triggers> </Style> </Page.Resources> 添加:DataTrigger <Page.Resources> <DataTemplate x:Key="itemTemplate"> <CheckBox Name="cb" Content="{Binding}"/> <DataTemplate.Triggers> <DataTrigger Binding="{Binding Month}" Value="10"> <Setter TargetName="cb" Property="IsChecked" Value="true"></Setter> <Setter TargetName="cb" Property="Foreground" Value="red"></Setter> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> <Style TargetType="{x:Type CheckBox}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="IsChecked" Value="true"></Setter> <Setter Property="Foreground" Value="red"></Setter> </Trigger> </Style.Triggers> </Style> </Page.Resources>
Style.BasedOn 属性
1 <Window x:Class="StyleBasedOn.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="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 属性的另一个样式,必须将与或从基样式的类型派生该派生的样式的对象类型。
标签:
原文地址:http://www.cnblogs.com/Mengyl/p/4582678.html