'灰显'WPF按钮图像?

Dav*_*man 58 wpf wpf-controls

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

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

ito*_*son 155

在图像样式中使用触发器.(将它置于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>
Run Code Online (Sandbox Code Playgroud)

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

  • 很好的答案!我接受并+1。 (2认同)

小智 37

如果您想要更通用的东西,请将其放在窗口或UserControl的资源部分中.

<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>
Run Code Online (Sandbox Code Playgroud)

而在实际按钮中就是这样做的

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>
Run Code Online (Sandbox Code Playgroud)


Tow*_*wer 20

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅在“图像”是按钮的直接子项时才有效。在我的情况下,按钮内容由StackPanel包装并且没有用。 (2认同)