wpfのトリガー詳細

23279 ワード

原文http://zwkufo.blog.163.com/blog/static/25882512009724113250883/
7.1.2         --   (1)



                   。    ,   (Trigger)                           。    WPF ,Trigger       ,     :



(1)     :      Trigger。                。



(2)     :      DataTrigger。     CLR               。



(3)     :      EventTrigger。                。



 WPF ,                  Triggers  。         :FrameworkElement,Style,DataTemplate ControlTemplate。        ,FrameworkElement    EventTrigger。                       。                       ,                               ,        FrameworkElement     。       ,Trigger EventTrigger             , DataTrigger           。                       。                    Trigger       ,            。



  ,              ,WPF    MultiTrigger MultiDataTrigger         。            ,                     Triggers     。



1.       



           ,     WPF              。                WPF    ,     ,               。



(1)    



            ,                              。   3.2  ,                           。  Image  FrameworkElement     ,        ,       Image            ,             Button      ,     ,Image           ,            ,   Button     。                                   。     ,                     Image   ,      Button   。       Button       :     Button                  Image          。



                 。   WPF                  ,         Border,ButtonChrome 。     XAML         ,       ControlTemplate   ,                    。



(2)       



          ,WPF                         。    ,                ,                     XAML    。



                    ,                                  。                            ,                 。           ,                TextBox TextChanged  。                    ,                        。    ,        ,      C#     。



   ,           ,                 。           XAML            。           。



(3)         



 WPF ,                   。  IInputElement                MouseLeftButtonDown  ,  ButtonBase  WPF         Click  。                         ,                                               。       TextBox    GotFocus    ,  GotKeyboardFocus,GotStylusCapture GotMouseCapture   。    ,Click    GotFocus              ,        ,  WPF              。   XAML         ,                       。





7.1.2         --   (2)



2.       



             ,                。               TriggerBase      ,  Setter    。



(1)TriggerBase      



  ,                      。 7-1 TriggerBase      。





 7-1  TriggerBase      



    ,TriggerBase       。       DependencyObject ,           :EnterActions ExitActions。                                       。  ,  EventTrigger            ,                 ,  EventTrigger           。    EventTrigger     ,WPF     Actions  。                   。           EnterActions ExitActions     ,                 :



  App7.2



<Trigger Property="IsMouseOver" Value="True">

<Trigger.EnterActions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1"/>

</Storyboard>

</BeginStoryboard>

</Trigger.EnterActions>

<Trigger.ExitActions>

<BeginStoryboard>

<Storyboard>

<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.25" Duration="0:0:1"/>

</Storyboard>

</BeginStoryboard>

</Trigger.ExitActions>

</Trigger>



   App7.2 ,Trigger   TriggerBase          。Trigger          ,      ,   SourceName,Property,Value Setters。           ,          SourceName          。                         ,                  。             ,XAML                         。               ,WPF     Setters      Setter,          。



(2)Setter    



Setter         。          :TargetName,Property Value。                      、                    。       ,             。 Trigger Style    TargetType   ,XAML                     。      TargetType    ,Setter  TargetType   Property          TargetType.Property   。  ,     Setter                 ,              XAML  :



<Setter Property="Button.Background" Value="Blue"/> 

 MSDN Setter    SetterBase        ,Setter    SetterBase        。  Setter   ,SetterBase         EventSetter 。EventSetter               。  ,     Button              OnMouseEnter  ,                :

<EventSetter Event="Button.MouseEnter" Handler="OnMouseEnter"/>

 



   WPF                     ,EventSetter            。            EventSetter    ,                                 。               ,                             。



3.     



          。                  ,          Setter          。             ,                。



  App7.3            。



  App7.3



<TextBox TextWrapping="Wrap" Margin="5">

<TextBox.Style>

<Style TargetType="TextBox">

<Style.Triggers>

<Trigger Property="Text" Value="text">

<Setter Property="Background" Value="Aqua"/>

</Trigger>

</Style.Triggers>

</Style>

</TextBox.Style>

</TextBox>



           ,             "text",             。            Style         Trigger。 Trigger    , Trigger         Trigger      : Text      "text"   ,  Setter       ,          。



4.     



  Trigger             ,           DataTrigger        CLR       。  ,DataTrigger       Trigger      ,                 。DataTrigger          :Binding,Value Setters。                 ,              Binding          。       DataTrigger     TextBox           ,               App7.4。



  App7.4



<TextBox TextWrapping="Wrap" Margin="5">

<TextBox.Style>

<Style TargetType="TextBox">

<Style.Triggers>

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="text">

<Setter Property="Background" Value="Aqua"/>

</DataTrigger>

</Style.Triggers>

</Style>

</TextBox.Style>

</TextBox>



7.1.2         --   (3)



      :            DataTrigger     CLR         , Setter           。  XAML   Setter  Style      。    :             。                         ,WPF               ?        ,WPF              。



5.     



WPF          。                  。          EventTrigger,      。   TriggerBase            :Actions,RoutedEvent SourceName。          SourceName               。 RoutedEvent              。Actions       ,                。          10      。



6.      



           ,                   。                ,             ,                       。         ,         TextBox            "text"   ,           "text."   ,            XAML     App7.5。



  App7.5



<TextBox TextWrapping="Wrap" Margin="5">

<TextBox.Style>

<Style TargetType="TextBox">

<Style.Triggers>

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}"Value="text">

<Setter Property="Background" Value="Red"/>

</DataTrigger>

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="text.">

<Setter Property="Background" Value="Blue"/>

</DataTrigger>

</Style.Triggers>

</Style>

</TextBox.Style>

</TextBox>

 



       ,                   。      ,             。                 ,WPF                       。       App7.6       。



  App7.6



<Button Content="Press Me!">

<Button.Style>

<Style TargetType="{x:Type Button}">

<Style.Triggers>

<Trigger Property="Button.IsMouseOver" Value="True">

<Setter Property="Button.Foreground" Value="Blue"/>

</Trigger>

<Trigger Property="Button.IsPressed" Value="True">

<Setter Property="Button.Foreground" Value="Red"/>

</Trigger>

</Style.Triggers>

</Style>

</Button.Style>

</Button>

 



                            ,         ,     。          ,IsMouseOver     True,        IsPressed       True,              ,WPF              。



7.      



          ,           MutiTrigger MutiDataTrigger。          ,            Conditions         。            : TextBox         "text"     TextBox   ,TextBox          。      XAML       App7.7  。



  App7.7



<TextBox TextWrapping="Wrap" Margin="5">

<TextBox.Style>

<Style TargetType="TextBox">

<Style.Triggers>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="Text" Value="text"/>

<Condition Property="IsMouseOver" Value="True"/>

</MultiTrigger.Conditions>

<Setter Property="Background" Value="Aqua"/>

</MultiTrigger>

</Style.Triggers>

</Style>

</TextBox.Style>

</TextBox>



【from 《WPF     》 http://book.51cto.com  2009-06-10 11:57              】