Trigger的使用。利用Trigger對象,我們可以接收到屬性變化或者事件發生,並據此做出適當的響應。Trigger本身也是支持多種類型的,下面是一個屬性Trigger的例子:
<Style TargetType="ListBoxItem">
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Opacity" Value="1.0" />
<!--其他的Setters->
</Trigger>
</Style.Triggers>
</Style>
這段代碼設置ListBoxItem的Opacity屬性的默認值為0.5。但是,在IsSelected屬性為True時,ListBoxItem的Opacity屬性值為1。從上面的代碼還可以看出,在滿足一個條件后,可以觸發多個行為(定義多個Setters)。同樣地,上面的Triggers也是一個集合,也可以添加多個Trigger。
注意上面的多個Trigger是相互獨立的,不會互相影響。另一種情況是需要滿足多個條件時才觸發某種行為。為此,WPF提供了MultiTrigger以滿足這種需求。比如:
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="Content" Value="{x:Null}" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow" />
</MultiTrigger>
</Style.Triggers>
</Style>
這就表示只有IsMouseOver為True、Content為NULL的時候才將Background設置為Yellow。
以上的Trigger都是基於元素屬性的。對於鼠標移動等事件的處理;
WPF有專門的EventTrigger。但因EventTrigger多數時候是和Storyboard配合使用的;
現在所討論的Trigger都是基於屬性的值或者事件的。
溫馨提醒:
對於小的應用程序,這個ControlTemplate一般直接定義在XAML的根元素。對於大的應用程序,通常應該定義在專門的資源XAML文件中,根元素是ResourceDictionary。
不管定義在什么地方,除了前面用Style定義外觀,以及用Resource實現元素重用外
<ControlTemplate x:Key="templateThermometer" TargetType="{x:Type ProgressBar}">
<ControlTemplate.Resources>
<RadialGradientBrush x:Key="brushBowl"
GradientOrigin="0.3 0.3">
<GradientStop Offset="0" Color="Pink" />
<GradientStop Offset="1" Color="Red" />
</RadialGradientBrush>
</ControlTemplate.Resources>
<!-- 忽略其他相關內容-->
</ControlTemplate>
