专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WPF

话聊样式(Style)

发布时间:2011-06-23 13:55:08 文章来源:www.iduyao.cn 采编人员:星星草
话谈样式(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 >>由数据触发的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 属性的另一个样式,必须将与或从基样式的类型派生该派生的样式的对象类型。

    

    

       

     

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: