2009-04-27 61 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解决方案?

更新

我不认为TemplateBinding支持转换器,所以如果你想这样做的ControlTemplate中,你需要使用类似下面约束力的声明在逻辑树不够高。

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

其中BoolToDoubleConverter是一个IValueConverter,它返回1为真,0.5为假。如果您可以使用样式,我仍然会推荐样式方法。我相信更简单。

+0

谢谢,作为一个风格触发器正常工作。 – zproxy 2009-04-27 09:05:01

相关问题