2009-02-18 83 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

总之:触发器按顺序处理。

稍后的触发器可以覆盖先前的触发器。