如何在WPF XAML中将ControlTemplate的Enabled属性绑定到Opacity?

5
在WPF中,如何扩展ControlTemplate以使其应用于按钮并且当按钮被禁用时淡化为0.5不透明度,一旦启用则淡化回1.0不透明度。这种视觉效果也应在父级被禁用时工作。
1个回答

12

你不需要一个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。如果可以使用样式,我仍然建议采用样式方法。我认为这种方式更加简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接