2014-10-28 2 views
0

내 UI에 레이블이 있으며 스타일이 있습니다. 라벨을 클릭 할 때 (클릭 이벤트가 라벨을 사용할 수 없습니다로 내가 MouseDown 이벤트를 사용)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 이벤트 코드

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에 대한 로컬 값을 설정하고, 지역의 값은 트리거와 세터 설정을 포함한 모든 다른 값 소스보다 우선합니다. 자세한 내용은 MSDN의 Dependency Property Value Precedence을 참조하십시오.

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

에서, ForegroundBackground을 변경하는 트리거를 사용 myLabel에 사용자 지정 스타일을 적용하고, 이벤트 제거 :

사용 SetCurrentValue 로컬 값으로 전환하지 않고 현재 속성 값을 변경합니다 핸들러.

+0

감사합니다. @Mike. 두 번째 해결책은 나를 위해 잘 작동했습니다. 방금 다른 스타일을 썼고 레이블을 클릭하면 스타일이 프로그래밍 방식으로 적용됩니다. –