簡體   English   中英

如何在XAML(WPF)中設置相鄰觸發器的優先級

[英]How to set priority of neighboring Triggers in XAML (WPF)

很少有觸發器/多重觸發器會影響同一ControlTemplate中同一目標的同一屬性。 在同時激活所有人的情況下,如何定義它們之間的優先級?

<ControlTemplate.Triggers>

   <Trigger Property="IsEnabled" Value="False"> <!-- #1 -->
       <Setter TargetName="background" Property="Fill" Value="Gray"/>
   </Trigger>

   <Trigger Property="IsIndeterminate" Value="True"> <!-- #2 -->
       <Setter TargetName="background" Property="Fill" Value="Orange"/>
   </Trigger>

</ControlTemplate.Triggers>

在我的示例中,我具有用於ProgressBar的ControlTemplate,在其中為自定義“ background”元素設置了兩個觸發器。 如果ProgressBar同時被禁用和不確定,則將獲得#2觸發器的效果,使其變為橙色,而在這種情況下,我希望使其變為#1灰色。

從上到下評估所有觸發器。 在偽代碼中,這轉換為

if (IsEnabled == false) { background.Fill = Gray }
if (isIndeterminate == true) { background.Fill = Orange }

因此,如果您想獲得理想的結果,只需將它們交換為

<Trigger Property="IsIndeterminate" Value="True"> <!-- #2 -->
    <Setter TargetName="background" Property="Fill" Value="Orange"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False"> <!-- #1 -->
    <Setter TargetName="background" Property="Fill" Value="Gray"/>
</Trigger>

為了進一步回答您先前的問題,例如,

<Trigger Property="IsIndeterminate" Value="True"> <!-- #2 -->
    <Setter TargetName="background" Property="Fill" Value="Orange"/>
    <Setter TargetName="forground" Property="Fill" Value="Red"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False"> <!-- #1 -->
    <Setter TargetName="background" Property="Fill" Value="Gray"/>
</Trigger>

如果IsInderminate為true且IsEnabled為false,則背景將為灰色,前景將為紅色,因為將評估觸發器,並從上至下應用設置器。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM