在WPF中,如何扩展ControlTemplate以使其应用于按钮并且当按钮被禁用时淡化为0.5不透明度,一旦启用则淡化回1.0不透明度。这种视觉效果也应在父级被禁用时工作。
你不需要一个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 不支持 Converter,所以如果你想在 ControlTemplate 中完成这个功能,你需要在逻辑树中使用像下面这样的 Binding 语句。
Opacity={Binding Path=IsEnabled,
RelativeSource={RelativeSource TemplatedParent},
Converter={StaticResource BoolToDoubleConverter}}
BoolToDoubleConverter是一个IValueConverter,它将true转换为1,将false转换为0.5。如果可以使用样式,我仍然建议采用样式方法。我认为这种方式更加简单。