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 】