WPF 單個觸發器、多個觸發器、多條件觸發器


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM