WPF使用觸發(fā)器需要注意優(yōu)先級(jí)問(wèn)題解決
一、問(wèn)題開(kāi)始
現(xiàn)在有個(gè)需求:
初始狀態(tài)(未選中)的時(shí)候,CheckBox的Content 為 “乒乓球”,然后選中之后,將“乒乓球”就改為“我愛(ài)乒乓球” 并且將文字加粗變?yōu)榧t色。
然后就編寫(xiě)代碼如下:
<Window.Resources>
<Style x:Key="cb" TargetType="{x:Type CheckBox}">
<Setter Property="Foreground" Value="Green"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="我愛(ài)乒乓球"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<WrapPanel VerticalAlignment="Top" Background="LightBlue">
<CheckBox Content="乒乓球" Style="{StaticResource cb}" Margin="10"></CheckBox>
</WrapPanel>
實(shí)現(xiàn)效果如下:

奇怪了,為什么文字沒(méi)有改變呢?
二、問(wèn)題說(shuō)明
以上問(wèn)題就是使用觸發(fā)器初期很容易犯的錯(cuò)誤:沒(méi)有注意樣式設(shè)置的優(yōu)先級(jí)。
如上案例中:<CheckBox Content="乒乓球" Style="{StaticResource cb}" Margin="10"></CheckBox>
將CheckBox自身的元素標(biāo)簽上設(shè)置了Content,這里設(shè)置的屬性具有最高的優(yōu)先級(jí),那么元素標(biāo)簽就不會(huì)再去使用其他地方設(shè)置的屬性值,因此無(wú)論其他地方如何改變都不會(huì)生效。
三、問(wèn)題訂正
解決該問(wèn)題只需要將需要在觸發(fā)器中需要設(shè)置的屬性中,將默認(rèn)值設(shè)置到樣式內(nèi),而不是設(shè)置在標(biāo)簽元素自身上。代碼如下所示:
<Window.Resources>
<Style x:Key="cb" TargetType="{x:Type CheckBox}">
<Setter Property="Foreground" Value="Green"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
<Setter Property="Content" Value="乒乓球"></Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="我愛(ài)乒乓球"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<WrapPanel VerticalAlignment="Top" Background="LightBlue">
<CheckBox Style="{StaticResource cb}" Margin="10"></CheckBox>
</WrapPanel>

總結(jié)
到此這篇關(guān)于WPF使用觸發(fā)器需要注意優(yōu)先級(jí)問(wèn)題解決的文章就介紹到這了,更多相關(guān)WPF觸發(fā)器優(yōu)先級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于C#實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證碼的示例代碼
這篇文章主要為大家介紹了如何利用C#語(yǔ)言制作一個(gè)圖片滑動(dòng)驗(yàn)證碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04
C#實(shí)現(xiàn)HTML和UBB互相轉(zhuǎn)換的方法
這篇文章主要介紹了C#實(shí)現(xiàn)HTML和UBB互相轉(zhuǎn)換的方法,通過(guò)兩個(gè)自定義函數(shù)DoHtmlToUB與ubbtohtml來(lái)實(shí)現(xiàn)HTML代碼與ubb代碼間的相互轉(zhuǎn)換,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
c#創(chuàng)建windows服務(wù)(Windows Services)詳細(xì)步驟
這篇文章主要介紹了c#創(chuàng)建windows服務(wù)(Windows Services)詳細(xì)步驟,大家參考使用吧2013-12-12
C#實(shí)現(xiàn)簡(jiǎn)易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)
本文主要介紹了C#實(shí)現(xiàn)簡(jiǎn)易灰度圖和酷炫HeatMap熱力圖winform(附DEMO),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

