C# 如何将启用ControlTemplate的属性绑定到WPF XAML中的不透明度

C# 如何将启用ControlTemplate的属性绑定到WPF XAML中的不透明度,c#,wpf,xaml,controltemplate,opacity,C#,Wpf,Xaml,Controltemplate,Opacity,在XAML内部的WPF中,如何扩展ControlTemplate,使其在应用于按钮且按钮被禁用时淡入0.5不透明度,禁用时淡入0.5不透明度,启用后淡入1.0不透明度 当禁用父级时,此视觉效果也应起作用。不需要控件模板。您只需使用样式即可实现这一点。以下按钮样式应用于所有按钮。当IsEnabled为true时,它将不透明度设置为0.5,当触发条件不再适用时,它会自动将其返回到1。如果要在样式中应用ControlTemplate,可以将此触发器添加到该样式中。由于IsEnabled是继承的,因此当

在XAML内部的WPF中,如何扩展ControlTemplate,使其在应用于按钮且按钮被禁用时淡入0.5不透明度,禁用时淡入0.5不透明度,启用后淡入1.0不透明度


当禁用父级时,此视觉效果也应起作用。

不需要控件模板。您只需使用样式即可实现这一点。以下按钮样式应用于所有按钮。当IsEnabled为true时,它将不透明度设置为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>
其中BoolToDoubleConverter是一个IValueConverter,返回1表示真,返回0.5表示假。如果您可以使用样式,我仍然推荐样式方法。我相信这要简单得多

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