在XAML中更改具有透明度的PNG的显示颜色

时间:2011-12-02 18:54:44

标签: c# wpf xaml

我有一些透明度的PNG,我用于WPF / C#应用程序中的按钮。 现在我有两个版本的每个PNG,一个用于普通视图,一个用于悬停,每个版本都有不同的颜色。但是,我真的只想拥有一个单一的PNG,并且可能会制作一些不透明的白色(每个图像都是一种颜色,除了形状之外没有任何细节。 是否可以使用SolidColorBrush或类似方法更改每个颜色,并在我的XAML中创建Normal / Hover版本作为静态资源? 像这样:

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

是的,我完全编造了“填充”的东西...... 但基本的想法是我有一个ResourceDictionary,它包含整个应用程序中使用的颜色方案,这使得我可以在一个地方更改我在应用程序中使用的任何约6种颜色,并且每次更新引用那种颜色的控件......但我不能做的一个地方就是那些按钮的PNG。 (理想情况下,我将在ResourceDictionary中创建一些可以在运行时加载的东西,使应用程序具有备用的“皮肤”......但是现在PNG使我无法做到这一点。)

编辑:顺便说一下,如果解决方案需要转换器或代码编写的内容,那就完全没了问题。

3 个答案:

答案 0 :(得分:0)

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

编辑:这是一些代码:

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

答案 1 :(得分:-1)

您可以尝试在悬停图片上应用ShaderEffect Effect或创建转换图片的markup extension。另一种可能性是将这种逻辑封装在Image的子类中。

答案 2 :(得分:-1)

有一个解决方案:http://msdn.microsoft.com/ru-ru/library/ms752364.aspx 您可以使用另一个ImageSource中的新Format-object创建ImageSource。 Format对象指定Image的颜色掩码。