2011-12-02 116 views
3

我有一些PNG具有透明度,可用于WPF/C#应用程序中的按钮。 现在我有两个版本的每个PNG,一个用于普通视图,一个用于悬停,每个都有不同的颜色。但是,我真的很想只有一个PNG,并且可能会使所有不透明的白色(每个图像都是一种颜色,除了形状以外没有其他细节)。 然后可以使用SolidColorBrush更改每个颜色,或者?类似的,在我的XAML创建普通/哈弗版本为静态资源 事情是这样的:用XAML中的透明度更改PNG的显示颜色

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

是啊,我完全是编造的“填充”的事情...... 但基本的想法是,我有一个ResourceDictionary,其中包含在整个应用程序中使用的颜色方案,这使得我可以在一个位置更改我在应用程序中使用的约6种颜色中的任何一种颜色,并更新每个引用该颜色的控件的颜色。但是t他不能做的一个地方就是那些按钮的PNG。 (理想的是,将来我会让ResourceDictionary在运行时加载,以使应用程序具有备用“皮肤”..但现在PNG让我无法做到这一点)。

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

回答

-1

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

+1

我很喜欢WPF,但它还是很新的...例子将不胜感激。 –

+0

@AdamHaile:好吧,如果你想转换像素,你可以使用['WriteableBitmap'](http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx),我真的不能给你一个例子,因为它是一个痛苦的使用,它取决于你的文件的格式,多年以来没有使用它。 –

0

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

编辑:下面是一些代码:

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

引用这个问题,“使所有**不是**透明的白色”。你的回答并不符合这一点。 –

+0

哎呀,我觉得哑巴。我能想到的唯一事情就是使用几何图形,忘记PNG。但是这可能太复杂了。 –