2014-11-05 2 views
9

언제 Style.Triggers을 선택해야합니까? 언제 ControlTemplate.Triggers을 선택해야합니까? 다른 것을 사용하면서 어떤 이점이 있습니까?Style.Triggers 대 ControlTemplate.Triggers

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <ControlTemplate.Triggers> 
        ... 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     ... 
    </Setter> 
    <Style.Triggers> 
     ... 
    </Style.Triggers> 
</Style> 

답변

10

업데이트 윈도우 8의 버튼 ControlTemplate가해야 할 수도 있습니다 경우가 있으므로 IsMouseOver에 대한 ControlTemplate.Trigger를 사용하지 Background does not change of button C# WPF에서 :

내가 같은 결과를 얻을 이러한 스타일을 말해봐 원하는 기능을 얻기 위해 완전히 덮어 씁니다. 따라서 ControlTemplate 트리거를 스타일 트리거보다 사용해야하는 경우가 있습니다.

기본값 인 ControlTemplate을 항상 무시할 필요는 없습니다. 컨트롤이 있고 IsMouseOver이 true 일 때 모든 MyTextControl에 파란색이 표시되도록하고 Foreground을 기본값으로두고 싶습니다. 당신은이 같은 것을 사용할 수 있습니다

<Style TargetType="{x:Type MyTextControl}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Foreground" Value="Blue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

당신이 사용하고자하는 경우 ControlTemplate.Triggers 기본 MyTextControlTemplate을 복사해야합니다 그렇지 않으면 더 시각적으로 끝낼 것입니다.

유일한 차이점은 Style.TriggersControlTemplate.Triggers (Precedence documantation)보다 우선 순위가 낮다고 생각합니다. 그러나 그것은 두 가지 트리거 유형을 모두 사용하는 경우에만 중요합니다.

+0

나를 위해 기본 템플릿 스타일 –

+0

을 대체하지 않습니다. @CoolBlue 오른쪽 코드는 기본 템플릿 그대로 유지합니다. 질문에서 코드를 사용한다면 기본값을 무시할 것입니다. – ShyKnee

+0

요점은 우선 순위 때문에 Windows 8 이후의 변경 사항과 함께 위의 코드가 더 이상 작동하지 않으며 템플릿이 스타일에 의해 재정의되지 않기 때문입니다. 요즘 가장 좋은 방법은 컨트롤에서 마우스 오른쪽 버튼을 클릭하고 옵션에 따라 기본 스타일의 복사본을 편집하는 것입니다. VS2013은이를 즉시 제공합니다. –