我有一个简单Button
控制包含一个Image
对象作为其内容。我想这样设置Image
不透明度为0.5时Button
被禁用,以提供一个额外的视觉提示Button
状态。'灰色'WPF按钮图像?
什么是实现这一结果在XAML最简单的方法?谢谢你的帮助。
我有一个简单Button
控制包含一个Image
对象作为其内容。我想这样设置Image
不透明度为0.5时Button
被禁用,以提供一个额外的视觉提示Button
状态。'灰色'WPF按钮图像?
什么是实现这一结果在XAML最简单的方法?谢谢你的帮助。
在图像样式中使用触发器。 (将它放在按钮样式中会更自然,但Button样式不会因为令人讨厌的技术原因而轻易影响图像,它可以在Button的ControlTemplate中完成,但这对于您在此处想要的操作来说是过度的)。
<Button>
<Image Source="something.png">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Button>
注意我们正在采取的事实的优点在这里,当按钮被禁用的图像将被禁用,所以我们可以直接对图像自身的IsEnabled属性触发。在其他情况下,我们想要触发的Button属性可能不会被图像继承;在这种情况下,我们需要使用具有FindAncestor RelativeSource的DataTrigger绑定到包含按钮。
伟大的答案!接受并从我+1。 – 2010-03-28 01:23:55
魔术解决方案:)。我喜欢。 – LukTar 2016-11-07 15:56:38
这里有一个更通用的风格,你可以申请:
<Style TargetType="Button">
<Style.Resources>
<Style TargetType="Image">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
请注意,这仅适用于图像是按钮的直接子项。在我的情况下,按钮内容由StackPanel包装,并没有奏效。 – 2015-03-23 01:41:59
@JonePolvora谢谢你澄清。我很困惑,为什么我没有从这篇文章中受益,直到我看到你的帖子。 – 2015-12-29 22:13:33
如果你想要的东西更通用的,把这个在你的资源节你的窗口或用户控件。
<UserControl.Resources>
<Style x:Key="ImageEnabled" TargetType="Image">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.25"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
而且在实际的按钮只是这样做
<Button>
<Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>
不能做这样的工作。这为我工作: http://stackoverflow.com/questions/4532943/icommand-canexecute-can-not-disable-button-with-image-content/11126571#11126571 – aeinstein 2012-06-20 19:32:06