如何在wpf中设置图片背景
how to set image background in wpf
我正在尝试将非活动按钮设置为具有半透明(即变灰)图像。然而由于某种原因,图像变成了白色/黄色(就像在明亮的背景上一样):
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和按钮是深色对比,实际上是浅灰色)
我应该怎么做才能得到我想要的灰色效果?
问题是默认的 Button
模板:它根据控件的状态更改其背景,并且新背景优先于您在样式中设置的背景。
在这种情况下,'Disabled' 状态的画笔类似于 #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
模板中得到处理。
我正在尝试将非活动按钮设置为具有半透明(即变灰)图像。然而由于某种原因,图像变成了白色/黄色(就像在明亮的背景上一样):
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和按钮是深色对比,实际上是浅灰色)
我应该怎么做才能得到我想要的灰色效果?
问题是默认的 Button
模板:它根据控件的状态更改其背景,并且新背景优先于您在样式中设置的背景。
在这种情况下,'Disabled' 状态的画笔类似于 #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
模板中得到处理。