2009-02-18 86 views
44

我有下面的XAML代碼:在WPF中,觸發器的順序是否重要?

<DockPanel> 
    <DockPanel.Resources> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Foreground" Value="Yellow"></Setter> 
       </Trigger> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="Foreground" Value="Green"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DockPanel.Resources> 
    <Button Content="Cut" Height="30" Width="75"/> 
</DockPanel> 

會發生什麼事是,當我將鼠標放在按鈕,前景變爲黃色,然後當我按下按鈕,前景變爲綠色。

現在,如果我將XAML中的觸發器的順序顛倒過來,當將鼠標移到XAML上時,前景將變爲黃色,但當按下按鈕時,前景不會變爲綠色。

這是什麼解釋?一個觸發器是否凌駕另一個觸發器?

+0

我真的希望,我不是唯一的程序員,因爲這個失去了幾個小時... https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716 #47006716 – Krythic 2017-10-30 00:48:26

回答

58

WPF正在按聲明順序處理您的觸發器。在第二個例子中,前景被簡單地改爲綠色。但是,然後IsMouseOver觸發器運行並將顏色設置回黃色。

IsMouseOver在優先級上與IsPressed沒有任何關係。重要的是觸發器的XAML中的聲明順序。

+0

謝謝賈裏德,這解釋它完全 – ScottG 2009-02-18 14:19:39

7

總之:觸發器按順序處理。

稍後的觸發器可以覆蓋先前的觸發器。