2009-02-18 35 views
44

Tôi có XAML sau:Trong WPF, trình tự của Triggers có quan trọng không?

<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> 

Điều gì xảy ra khi tôi chuột lên nút, những thay đổi foreground sang màu vàng và sau đó khi tôi nhấn nút, những thay đổi foreground là màu xanh lá cây.

Bây giờ, nếu tôi đảo ngược thứ tự các trình kích hoạt của tôi trong XAML, nền trước sẽ chuyển sang màu vàng khi tôi di chuột qua nó, nhưng khi tôi nhấn nút, tiền cảnh sẽ KHÔNG chuyển sang màu xanh lá cây.

Giải thích cho điều này là gì? Là một kích hoạt ghi đè khác?

+0

Tôi thực sự hy vọng rằng tôi không phải là lập trình viên duy nhất mất một vài giờ vì điều này ... https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716 # 47006716 – Krythic

Trả lời

58

WPF đang xử lý trình kích hoạt của bạn theo thứ tự đã khai báo. Trong ví dụ thứ hai, tiền cảnh được thay đổi nhanh chóng thành màu xanh lá cây. Nhưng sau đó kích hoạt IsMouseOver chạy và thiết lập màu trở lại màu vàng.

IsMouseOver không có mối quan hệ nào với IsPressed được ưu tiên. Điều quan trọng là thứ tự khai báo trong XAML của các trigger.

+0

Cảm ơn Jared, điều đó giải thích nó hoàn hảo – ScottG

+0

Tôi có thể đã sử dụng bạn khoảng bốn giờ trước: https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716#47006716 – Krythic

7

Tóm lại: trình kích hoạt được xử lý theo thứ tự.

Trình kích hoạt sau 'có thể ghi đè các trình kích hoạt trước đó.

Các vấn đề liên quan