【问题标题】:how to set image background in wpf如何在wpf中设置图片背景
【发布时间】:2018-01-23 13:17:43
【问题描述】:

我正在尝试将非活动按钮设置为具有半透明(即灰色)图像。然而由于某种原因,图像变成了白色/黄色(就像在明亮的背景上一样):

As you can see it's light yellow

Possibly better annotated screenshot

以下是 XAML 样式:

 <Style x:Key="ToolButton" TargetType="{x:Type Button}" BasedOn="{x:Null}">
    <Setter Property="Background" Value="#888"/>
    <Setter Property="Padding" Value="10,2"/>
    <Setter Property="BorderThickness" Value="0"/>
    <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>

<Style x:Key="ToolPanel" TargetType="{x:Type StackPanel}">
    <Setter Property="Background" Value="#111"/>
    <Style.Resources>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource ResourceKey=ToolButton}"/>
    </Style.Resources>
</Style>

(StackPanel 和按钮是深色的对比,它们实际上是浅灰色的)

我应该怎么做才能获得我想要的灰色效果?

【问题讨论】:

  • 我在您的屏幕截图中看不到浅黄色(可能是因为它非常小)。确定你没有打开 f.lux 吗?我曾经以为有些东西是黄色的,但那是因为 f.lux -___-
  • 可能(我不这么认为),但我的问题是“背景”(无论它来自哪里)与图像所在的按钮(或面板)不同。具体来说,您可以看到它是一种更亮(更接近于白色)的颜色。
  • 老实说,我不太确定要与图片中的内容进行比较,抱歉
  • 现在呢?
  • 啊,这就是你的意思!现在我明白了,谢谢:) 也许我能找到问题

标签: c# wpf xaml button transparency


【解决方案1】:

问题在于默认的Button 模板:它会根据控件的状态更改其背景,并且新背景优先于您在样式中设置的背景。

在这种情况下,“禁用”状态的画笔类似于#F4F4F4,或非常浅的灰色。

解决方法是声明一个新的Button 模板。例如:

<ControlTemplate TargetType="Button">
  <!--Optional: Add border brush/thickness if you want a border-->
  <Border x:Name="border" Background="{TemplateBinding Background}">
    <ContentPresenter x:Name="contentSite" Margin="{TemplateBinding Padding}" />
  </Border>
  <ControlTemplate.Triggers>
    <Trigger Property="IsEnabled" Value="False">
      <!--Optional: Remove background when disabled-->
      <!--Setter TargetName="border" Property="Background" Value="Transparent" /-->
      <Setter TargetName="contentSite" Property="Opacity" Value="0.5" />
    </Trigger>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter TargetName="border" Property="Background" Value="#AAA" />
    </Trigger>
    <Trigger Property="IsPressed" Value="True">
      <Setter TargetName="border" Property="Background" Value="#333" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

请注意,在此版本中,您不需要Image 样式来更改Opacity;它在Button 模板中得到了处理。

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 2014-04-05
    • 2017-12-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多