2009-04-27 5 views

답변

8

ControlTemplate이 필요하지 않습니다. 스타일만으로이 작업을 수행 할 수 있습니다. 다음 버튼 스타일은 모든 버튼에 적용됩니다. IsEnabled가 true 일 때 Opacity를 0.5로 설정하고 트리거 조건이 더 이상 적용되지 않으면 자동으로 1로 되돌립니다. ControlTemplate을 스타일에 적용하는 경우이 트리거를 스타일에 추가 할 수 있습니다. IsEnabled가 상속 된 후 부모가 비활성화 된 경우에도 작동합니다.

<Window.Resources> 
    <Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <Trigger Property="Control.IsEnabled" Value="false"> 
       <Setter Property="Control.Opacity" Value="0.5" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

또는 특별히 ControlTemplate 솔루션이 필요합니까?

업데이트

난 당신이 논리적 트리에서 충분히 높은 다음 바인딩 문 같은 것을 사용해야은 ControlTemplate에서이 작업을 수행하려는 경우 TemplateBinding 그렇게 컨버터를 지원합니다 생각하지 않습니다.

Opacity={Binding Path=IsEnabled, 
     RelativeSource={RelativeSource TemplatedParent}, 
     Converter={StaticResource BoolToDoubleConverter}} 

여기서 BoolToDoubleConverter는 true의 경우 1, false의 경우 0.5를 반환하는 IValueConverter입니다. 스타일을 사용할 수 있다면 여전히 스타일 접근 방식을 권하고 싶습니다. 훨씬 더 간단합니다.

+0

감사합니다. 스타일 트리거처럼 작동합니다. – zproxy

관련 문제