在XAML中改变PNG的透明度显示颜色

本文关键字:透明度 显示 颜色 PNG XAML 改变 | 更新日期: 2023-09-27 18:16:25

我在我的WPF/c#应用程序中使用了一些透明的png作为按钮。现在每个PNG都有两个版本,一个用于普通视图,一个用于悬停,每个都有不同的颜色。然而,我真的很想只有一个单一的PNG,也许所有的东西都不是透明的白色(每个图像都是一种颜色,除了形状没有其他细节)。那么是否有可能使用SolidColorBrush或类似的工具来改变每个颜色,并在我的XAML中创建正常/悬停版本作为静态资源?像这样:

<Image Key="BtnMenu" Source="Images/Menu.png" Fill="ButtonNormalBrush" />
<Image Key="BtnMenuHover" Source="Images/Menu.png" Fill="ButtonHoverBrush" />

是的,我完全编造了"填充"的东西…但基本的想法是,我有一个ResourceDictionary,它包含整个应用程序中使用的配色方案,这使得我可以在一个地方改变我在应用程序中使用的大约6种颜色中的任何一种,它更新引用该颜色的每个控件…但有一个地方我做不到,那就是按钮的png。(理想情况下,在未来,我将使ResourceDictionary可以在运行时加载,使应用程序有备用的"皮肤"…但现在png让我不能这样做)。

编辑:顺便说一句,如果解决方案需要转换器或用代码编写的东西,那完全可以。

在XAML中改变PNG的透明度显示颜色

嗯…如果你创建了一个网格,并将图像放在网格中,你可以将网格的背景设置为你的填充色。

编辑:这里是一些代码:

<Button>
    <Grid Background="SkyBlue">
        <Image Source="img.png" Stretch="None" />
    </Grid>
</Button>

有一个解决方案:http://msdn.microsoft.com/ru-ru/library/ms752364.aspx你可以简单地用另一个ImageSource的new Format-object来创建ImageSource。

您可以尝试在悬停图像上应用ShaderEffect作为Effect,或者创建一个转换图像的标记扩展。另一种可能性是将这种逻辑封装在Image的子类中。