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>