2014-10-28 68 views
0

我在我的UI中有一個標籤並且有一個樣式。WPF標籤IsMouseOver樣式在點擊後不起作用

<Style x:Key="ColorChangingLabel" TargetType="{x:Type Label}"> 
    <Setter Property="FontSize" Value="13"></Setter> 
    <Setter Property="Foreground" Value="#ff676767"></Setter> 
    <Setter Property="Background" Value="White"></Setter> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="#ffEAECEE"></Setter> 
      <Setter Property="Foreground" Value="#ff0067B0"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

除了MouseOver觸發我也想設置相同的屬性值在單擊標籤時(如點擊事件不適用於標籤我使用MouseDown事件)。 這裏是MouseDown事件代碼

private void myLabel_MouseDown(object sender, MouseButtonEventArgs e){ 
    myLabel.Foreground = new SolidColorBrush(Color.FromArgb(0xff, 0x00, 0x67, 0xB0)); 
    myLabel.Background = new SolidColorBrush(Color.FromArgb(0xff, 0xea, 0xec, 0xee)); 
} 

所以我的問題是,如果我的鼠標了我的標籤上,之後我的鼠標懸停的風格永遠不會應用到我的標籤。我知道風格重寫,但不知道如何擺脫這一點。

回答

1

MouseDown處理程序設置局部值ForegroundBackground,和當地的價值優先於所有其他的價值來源,包括那些由觸發器和setter方法設置。有關更多信息,請參閱MSDN上的Dependency Property Value Precedence

使用SetCurrentValue改變當前的屬性值,而無需切換到本地值:

myLabel.SetCurrentValue(
    Control.ForegroundProperty, 
    SolidColorBrush(Color.FromArgb(0xff, 0x00, 0x67, 0xB0))); 

另外,應用自定義樣式到使用觸發器來改變ForegroundBackgroundmyLabel,並且擺脫了事件處理程序完全。

+0

謝謝@Mike。第二種解決方案對我很好。我只寫了另一種風格,點擊標籤時只需以編程方式應用該風格。 – 2014-10-29 08:40:07