2017-11-23 9 views
2

WPF에 들어가기 시작합니다. 나는 두 개의 이벤트 핸들러가 :Mouse_Leave에서는 백그라운드가 변경되지만 Mouse_Enter에서는 변경되지 않습니다.

private void Mouse_Enter(object sender, MouseEventArgs e) 
{ 
    ((Button)sender).Background = Brushes.Red; 
} 
private void Mouse_Leave(object sender, MouseEventArgs e) 
{ 
    ((Button)sender).Background = Brushes.Black; 
} 

마우스 버튼의 영역에 진입 아무 일도 발생하지 않습니다. 그러나 버튼의 영역을 벗어날 때 버튼이 검게 변합니다. Mouse_Enter 안에 중단 점을 넣었으며이 메서드를 확실히 실행하고 있습니다. 배경색을 변경하지 않습니다.

문제를 해결하는 방법은 무엇입니까? 감사!

+0

마우스가 들어가면 버튼의 색이 기본 "버튼 호버"로 변경됩니까? – Fleury26

+0

@ Fleury26 네, 그렇습니다. –

+2

C# 코드에있을 필요가 없으며 XAML에있을 수 있다면 [이 답변]을 참조하는 것이 좋습니다 (https://stackoverflow.com/questions/20073294/change-color-of-button-when- mouse-is-over) – Fleury26

답변

0

기본 버튼 템플리트에 "기본 제공"트리거가있어 버튼이 MouseEnter 이벤트에서 배경을 변경하려는 시도를 무시하게되므로이 경우 템플릿을 편집하고 트리거를 비활성화해야합니다

Visual Studio 편집기에서 단추를 마우스 오른쪽 단추로 클릭하고 "템플릿 편집"을 선택한 다음 "복사본 편집 ..."을 선택하여 원하는대로 스타일 이름을 지정하고 XAML을 통해 트리거를 찾습니다. "IsMouseOver"를 입력하고 아래의 두 줄을 삭제하십시오.

    <ControlTemplate.Triggers> 
         <Trigger Property="IsDefaulted" Value="true"> 
          <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="true"> 
    --- Delete this line <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/> 
    --- Delete this line <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
+0

정말 고마워,하지만 난 정말 코드 숨김을 사용하여이를 수행하려고합니다. 물론 프로덕션 목적이 아니라 학습을위한 것입니다. XAML 트리거를 사용하지 않고 수정하는 방법을 설명해 주시겠습니까? 다시 한 번 감사드립니다! –