'灰显'WPF按钮图像?

时间:2010-03-27 20:57:36

标签: wpf wpf-controls

我有一个简单的Button控件,其中包含一个Image对象作为其内容。我希望在禁用Image时将Button不透明度设置为0.5,以便为Button状态提供额外的视觉提示。

在XAML中实现该结果的最简单方法是什么?谢谢你的帮助。

3 个答案:

答案 0 :(得分:148)

在图像样式中使用触发器。 (将它置于Button样式会更自然,但由于技术上的烦恼,Button样式不会轻易影响Image。它可以在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>

请注意,我们正在利用禁用Button时禁用Image的事实,因此我们可以直接在Image自己的IsEnabled属性上触发。在其他情况下,我们想要触发的Button属性可能不会被Image继承;在这种情况下,我们需要使用带有FindAncestor RelativeSource的DataTrigger绑定到包含按钮。

答案 1 :(得分:19)

以下是您可以应用的更通用的样式:

<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>

答案 2 :(得分:1)

如果您希望整个按钮显示为灰色,则对按钮本身进行样式设置对我来说很有用。它似乎使所有按钮内容变灰。

                    <Button.Style>
                        <Style TargetType="Button">
                            <Style.Triggers>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Opacity" Value=".75"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>