[英]Setting Button background Image wpf
我想设计一个带有2个背景图片的按钮(第一个启用时,第二个禁用时)。 如下所示。 我该如何以按钮样式进行操作?
尝试过这样的事情。 但是Content在这里不是属性。
<Style TargetType="{x:Type Button}" x:Key="LinkButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Overlay" CornerRadius="2">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="True">
<!--<Setter TargetName="Overlay" Property="Content" Value="Red"/>-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如果要在xaml中执行此操作,则使用画布在按钮内有两个图像。 使用触发的编辑样式可以更改按钮内所需图像的可见性。
我认为您可以理解。 如果确实有用,请标记为有用,谢谢
您可以像下面这样在Style和Converter的帮助下完成此操作:
不透明度转换器:
using System;
using System.Globalization;
using System.Windows.Data;
namespace EnableButton
{
public class OpacityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? 1 : 0.5;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
您的Xaml:
<Window x:Class="EnableButton.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EnableButton"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:OpacityConverter x:Key="OpacityConverter"/>
<Style x:Key="DisableIcon" TargetType="Image">
<Setter Property="Opacity" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled, Converter={StaticResource OpacityConverter}}"/>
</Style>
</Window.Resources>
<StackPanel>
<Button Height="24" IsEnabled="False">
<Image Style="{StaticResource DisableIcon}" Source="Open_22.png"/>
</Button>
</StackPanel>
</Window>
现在,如果您更改按钮的IsEnable属性,您将看到结果。 当在OpacityConverter中禁用父按钮时,我将图像的 不透明度属性从100%更改为50%,因此,如果需要其他数字,可以修复此问题。
更新资料
我想了一下你的问题。 我认为,如果禁用该按钮,不仅可以更改图像的不透明度 ,还可以将图像转换为单色图像。 因此,我找到了该解决方案(尝试之前添加对Microsoft.Expression.Effects.dll的引用,并将xmlns:ee =“ http://schemas.microsoft.com/expression/2010/effects”添加到表单中):
<Window x:Class="EnableButton.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EnableButton"
xmlns:ee="http://schemas.microsoft.com/expression/2010/effects"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="DisableImageStyle" TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False">
<Setter Property="Opacity" Value="0.4"/>
<Setter Property="Effect">
<Setter.Value>
<ee:EmbossedEffect/>
<!--This effect is also looks nice-->
<!--<ee:MonochromeEffect/>-->
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Button Height="40" IsEnabled="False">
<Image Style="{StaticResource DisableImageStyle}" Source="Open_22.png"/>
</Button>
</StackPanel>
</Window>
请注意,我现在不使用任何转换器!
您可以使用DataTrigger更改按钮的背景图像。 以下是该链接可能会有所帮助。
我不确定如何设置按钮的样式,但是如果能够将两个图像都放入样式中,则可以在更改IsEnabled
时更改可见性。
<Style TargetType="{x:Type Button}" x:Key="LinkButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Overlay" CornerRadius="2">
<Image x:Name="Enabled" Source="{StaticResource EnabledImg}"/>
<Image x:Name="Disabled" Source="{StaticResource DisabledImg}" Visibility="Collapsed"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Disabled" Property="Visibility" Value="Visible"/>
<Setter TargetName="Enabled" Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.