是否有可能在WPF中編寫自定義觸發器,可以分層評估?WPF層次觸發器
更新:在這個例子中我使用的主題,但基於它好像我要澄清,我不要求的方式來實現主題支持WPF的初步意見 - 這是編寫定製的觸發器和分層觸發器是利益在這裏,作爲替代,以MultiTrigger
在代碼中抽象的概念,你將與觸發器表達這種邏輯,當寫
if (theme == Themes.Black){
if (IsMouseOver)
Background = Brushes.Cyan;
if (IsSelected)
Background = Brushes.Red;
}
if (theme == Themes.White){
if (IsMouseOver)
Background = Brushes.Black;
if (IsSelected)
Background = Brushes.Grey;
}
然而喲u必須創建一套MultiTriggers
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Theme" Value="Black">
<Condition Property="IsMouseOver" Value="True">
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Cyan" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Theme" Value="White">
<Condition Property="IsMouseOver" Value="True">
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Black" />
</MultiTrigger>
// And so on...
這很快變成難以處理的複雜的控制,所以我試圖想象的方式來美化這一點,一個想法想出了以下語法:
<HierarchicalTrigger Property="Theme" Value="Black">
<HierarchicalTrigger.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Cyan" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</HierarchicalTrigger.Triggers>
</HierarchicalTrigger>
<HierarchicalTrigger Property="Theme" Value="White">
<HierarchicalTrigger.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Black" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Grey" />
</Trigger>
</HierarchicalTrigger.Triggers>
</HierarchicalTrigger>
有誰知道這樣的觸發器是否可以編寫,和/或有關於如何去做這個的任何提示?
提供的主題是你實際想要做的,或者僅僅是一個例子? – plast1k
只是一個例子,這可以用於任何事情 – havardhu
WPF確實具有「主題」的概念,您可以爲每個主題聲明顏色或刷子資源,然後根據需要在觸發器/其他樣式設置器中使用這些資源。你有沒有對WPF主題進行過任何研究?如果是這樣,請更具體地說明爲什麼這種方法不適合你的情況。如果不是的話,你應該在提問之前進行研究。 –