2010-03-05 91 views
61

如何在XAML中爲邊框設置MouseOver事件/觸發器?我希望邊框在鼠標結束時變爲綠色,然後當鼠標不再位於邊界時返回藍色。爲什麼我不能只使用下面的代碼:如何在XAML中爲邊框設置MouseOver事件/觸發器?

<Border 
    Name="ClearButtonBorder" 
    Grid.Column="1" 
    CornerRadius="0,3,3,0" 
    Background="Blue"> 
    <Border.Triggers> 
     <Trigger Property="Border.IsMouseOver" Value="True"> 
      <Setter Property="Border.Background" Value="Green" /> 
     </Trigger> 
     <Trigger Property="Border.IsMouseOver" Value="False"> 
      <Setter Property="Border.Background" Value="Blue" /> 
     </Trigger> 
    </Border.Triggers> 
    <TextBlock 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Text="X" /> 
</Border> 

我真的不明白這些觸發器和樣式在WPF。這是一種拖累,不能實現這樣簡單的事情。請爲我提供解決方案,並幫助我理解我的代碼出了什麼問題?謝謝一堆。

回答

119

是的,這是混淆了......

this blog post,看起來這是WPF的疏忽。

爲了使它工作,你需要使用樣式:

<Border Name="ClearButtonBorder" Grid.Column="1" CornerRadius="0,3,3,0"> 
     <Border.Style> 
      <Style> 
       <Setter Property="Border.Background" Value="Blue"/> 
       <Style.Triggers> 
        <Trigger Property="Border.IsMouseOver" Value="True"> 
         <Setter Property="Border.Background" Value="Green" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Style> 
     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" /> 
    </Border> 

我想這個問題並不常見,因爲大多數人往往會分解出這樣的事情變成一種風格,所以可以用於多個控件。

+2

謝謝你的回答。現在我知道它是如何完成的。儘管如此,爲什麼要這樣執行它仍然不合邏輯。但是,沒關係,我猜。 :) – Boris 2010-03-05 19:11:09

+0

是的,我同意這是illoigcal。正如我所說,似乎是從WPF的錯誤/遺漏。 – Grokys 2010-03-06 14:21:48

+5

我不同意它是一個錯誤或遺漏。在WPF中,有一個明確的規則集定義了屬性值優先。 http://msdn.microsoft.com/en-us/library/ms743230.aspx – 2014-05-30 02:20:58

相關問題