原文: 2000條你應(yīng)知的WPF小姿勢 基礎(chǔ)篇<63-68 Triggers和WPF類邏輯結(jié)構(gòu)>
在正文開始之前需要介紹一個人:Sean Sexton.?來自明尼蘇達雙城的軟件工程師。最為出色的是他維護了兩個博客: 2,000 Things ?You Should Know About C#? ?和? 2,000 Things You Should Know About?WPF ?。他以類似微博式的150字簡短語言來每天更新一條WPF和C#重要又容易被遺忘的知識。很希望能夠分享給大家。
本系列我不僅會翻譯他的每一個tip,也會加入自己開發(fā)之中的看法和見解。本系列我希望自己也能和他一樣堅持下來,每天的進步才能促成偉大。
在這里鄭重說明.該系列是基于Sean Sexton先生的英文博客, Sean Sexton擁有全部版權(quán)和撤銷權(quán)利。
前文可以翻閱本博客wpf標簽的文章。
[ 小九的學堂,致力于以平凡的語言描述不平凡的技術(shù)。如要轉(zhuǎn)載,請注明來源: 小九的學堂 。 cnblogs.com/xfuture ]
#63 Trigger觸發(fā)后的屬性改變可以自動重置
當Trigger改變了一個屬性的值后,如果Trigger中的判斷不再為true的時候,該屬性會自動重置為初始值。
例子:對一個button mouse over的時候你設(shè)置其有dropshadoweffect,而當你離開該button的時候就會回復其原始狀態(tài)。
<
Window.Resources
>
????
<
Style
x:Key
=
"hoverStyle"
TargetType
=
"Button"
>
????????
<
Style.Triggers
>
????????????
<
Trigger
Property
=
"IsMouseOver"
Value
=
"true"
>
????????????????
<
Setter
Property
=
"Button.Effect"
>
????????????????????
<
Setter.Value
>
????????????????????????
<
DropShadowEffect
/>
????????????????????
</
Setter.Value
>
????????????????
</
Setter
>
????????????
</
Trigger
>
????????
</
Style.Triggers
>
????
</
Style
>
</
Window.Resources
>
<
StackPanel
Orientation
=
"Horizontal"
HorizontalAlignment
=
"Center"
>
????
<
Button
Content
=
"Run"
Height
=
"23"
Width
=
"75"
Style
=
"{StaticResource hoverStyle}"
/>
????
<
Button
Content
=
"Skip"
Height
=
"23"
Width
=
"75"
Style
=
"{StaticResource hoverStyle}"
/>
????
<
Button
Content
=
"Jump"
Height
=
"23"
Width
=
"75"
Style
=
"{StaticResource hoverStyle}"
/>
</
StackPanel
>
#64 Wpf所支持的三種Triggers
Wpf支持三種不同種類的Triggers:
<1>. Property trigger,
1. 當依賴屬性改變時觸發(fā),
2. 使用屬性名字來定制,
3. 包含Setter元素,來賦予一個或者多個依賴屬性觸發(fā)器,當Trigger處于active狀態(tài)或者處于inactive狀態(tài)時,可以觸發(fā)一個或者多個TriggerAction.
?
<2>. Data trigger,
1. 當CLR屬性改變時觸發(fā),
2. 使用Binding 關(guān)鍵字來定制,
3. 包含Setter元素,來賦予一個或者多個依賴屬性觸發(fā)器,當Trigger處于active狀態(tài)或者處于inactive狀態(tài)時,可以觸發(fā)一個或者多個TriggerAction.
?
<3>. Event trigger,
1. 當一個Routed event觸發(fā)時觸發(fā),
2. 可以觸發(fā)派生自TriggerAction的類,比如BeginStoryboard, SoundPlayerAction.
3. 多用在WPF 動畫上
?
#65 依賴屬性繼承邏輯樹上層元素賦予的值
依賴屬性的值可以來自很多不同的數(shù)據(jù)源,但是一般來說都會從邏輯樹上層元素繼承值。
這意味著當你在Xaml中高層元素賦予一個依賴屬性值,其子元素相同名字的依賴屬性會繼承其值。
下面是一個在window元素中定義fontstyle而子元素繼承到的例子:
< Window x:Class ="WpfApplication1.MainWindow" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:m ="clr-namespace:PersonLib;assembly=PersonLib" Title ="MainWindow" Height ="350" Width ="525" FontStyle ="Italic" > < StackPanel Orientation ="Vertical" > < Button Content ="Run" Height ="23" Width ="75" /> < Button Content ="Skip" Height ="23" Width ="75" /> < StackPanel Orientation ="Horizontal" > < Label Content ="Inside 2nd StackPanel" /> < Label Content ="I do my own FontStyle" FontStyle ="Normal" /> </ StackPanel > </ StackPanel > </ Window >
子元素中的Label會繼承window定義的Italic的字體。
?
#66 依賴屬性冒泡尋找其繼承值
一個UI元素會向上尋找其需要繼承的值,除非尋找到獨特定義的屬性則會一直向上冒泡尋找到根元素。
下面有個button中尋找fontstyle屬性值的例子,穿過了stackpanel和grid一直到window找到其定義值。
< Window x:Class ="WpfApplication1.MainWindow" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:m ="clr-namespace:PersonLib;assembly=PersonLib" Title ="MainWindow" Height ="350" Width ="525" FontStyle ="Italic" > < Grid > < StackPanel Orientation ="Vertical" > < Button Content ="Run" Height ="23" Width ="75" /> < Button Content ="Skip" Height ="23" Width ="75" /> </ StackPanel > </ Grid > </ Window >
?
#67 UI元素控件的類繼承圖
?
#68 WPF UI元素的四個基礎(chǔ)類
存在四個基礎(chǔ)類,大多數(shù)UI元素繼承自它們,或者你自己定制一些類的時候也是繼承自它們。
1. ContentElement, 2. FrameworkContentElement, 3. UIElement, 4. FrameworkElement.
?
下一期會有更多關(guān)于WPF內(nèi)置結(jié)構(gòu)的Tips,希望能多多關(guān)注~
2000條你應(yīng)知的WPF小姿勢 基礎(chǔ)篇<63-68 Triggers和WPF類邏輯結(jié)構(gòu)>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
