C# 創(chuàng)建控件并設(shè)置樣式 — 觸發(fā)器
WPF中的事件幾乎無所不包,例如按鈕單擊、應(yīng)用程序啟動(dòng)和關(guān)閉事件等。實(shí)際上,WPF有幾類觸發(fā)器(Trigger),它們均繼承自TriggerBase基類。例如EventTrigger觸發(fā)器類就包含了一系列操作,每個(gè)操作都是一個(gè)派生自TriggerAction基類的對(duì)象。激活觸發(fā)器時(shí),就會(huì)執(zhí)行相應(yīng)的操作。
可借助EventTrigger,調(diào)用BeginStoryboard操作來觸發(fā)動(dòng)畫,調(diào)用ControllableStoryboardAction來操作故事板(storyboard),或者調(diào)用SoundPlayerAction來觸發(fā)聲音效果。
每個(gè)控件都有Triggers屬性,它可用于直接在該控件上定義觸發(fā)器。還可以沿著層次結(jié)構(gòu)向上定義觸發(fā)器,例如在前面演示的Window對(duì)象上。設(shè)置控件的樣式時(shí),最常用的觸發(fā)器類型是Trigger(但仍使用EventTrigger 觸發(fā)控件動(dòng)畫)。Trigger類用于設(shè)置屬性,來響應(yīng)其他屬性的改變,在Style對(duì)象中使用時(shí)的效果尤其好。
觸發(fā)器對(duì)象的配置如下:
?要定義Trigger對(duì)象監(jiān)視的屬性,應(yīng)使用TriggenProperty屬性。
?要定義何時(shí)激活Trigger對(duì)象,應(yīng)設(shè)置Trigger.Value屬性。
?要定義Trigger觸發(fā)的操作,應(yīng)將Trigger.Setters屬性設(shè)置為Setter對(duì)象的一個(gè)集合。
這里所指的Setter對(duì)象就是前面介紹的Setter對(duì)象。
下面的代碼顯示了在Style對(duì)象中用到一個(gè)觸發(fā)器:
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
上述代碼在 Button.IsMouseOver 屬性為 true 時(shí),將 Button 控件的 Foreground 屬性設(shè)置為 Yellow。IsMouseOver 是一個(gè)非常有用的屬性,可在查找控件信息或控件狀態(tài)時(shí)用作快捷鍵。顧名思義,如果鼠標(biāo)指針位于某個(gè)控件之上,則該屬性為true。這樣就可以為鼠標(biāo)滾輪編寫代碼。與其類似的屬性包括IsFocused,用于確定控件是否獲得了焦點(diǎn);IsHitTestVisible表示是否可以單擊該控件(即控件沒有被上層堆疊的控件蓋住);lspressed表示某個(gè)按鈕是否被按下。最后這個(gè)屬性僅適用于繼承自ButtonBase的按鈕,其他屬性則適用于所有控件。
還可以借助ControlTemplateTriggers屬性來實(shí)現(xiàn)更多功能,創(chuàng)建包含觸發(fā)器的控件模板。默認(rèn)的Button模板就采用這種方式響應(yīng)鼠標(biāo)滾輪滾動(dòng)、單擊和焦點(diǎn)切換。只有修改模板,才能實(shí)現(xiàn)自己的功能。
點(diǎn)擊加載更多評(píng)論>>