2011-12-02 119 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。但是這可能太複雜了。 –