在WPF内部的XAML中如何扩展ControlTemplate,以便当应用于按钮并且按钮被禁用时,它将在禁用时淡化为0.5不透明度,一旦启用则淡出回到1.0不透明度。如何将ControlTemplate启用的属性绑定到WPF XAML中的不透明度
当父母被禁用时,这种视觉效果也应该起作用。
在WPF内部的XAML中如何扩展ControlTemplate,以便当应用于按钮并且按钮被禁用时,它将在禁用时淡化为0.5不透明度,一旦启用则淡出回到1.0不透明度。如何将ControlTemplate启用的属性绑定到WPF XAML中的不透明度
当父母被禁用时,这种视觉效果也应该起作用。
您不需要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为假。如果您可以使用样式,我仍然会推荐样式方法。我相信更简单。
谢谢,作为一个风格触发器正常工作。 – zproxy 2009-04-27 09:05:01