2013-07-12 134 views
1

我一直在尋找更好的答案來解決我的問題,甚至當我解決它(不是很優雅),我想知道是否有任何其他方式。 我已經繼承了一個我不能修改太多的項目,我的意思是,我只能添加一些其他屬性或重寫方法,但不能更改基類或接口。從資源編程設置WPF圖像

該項目包含一個繼承WPF網格的類,以修改該行爲的某些方面。我必須添加一個新的列(通過代碼)與圖像。每一個圖像已經被存儲到一個資源組合,並宣佈通過靜態屬性,例如,我需要一個圖標聲明如下:

MyIcon.Source="{x:Static images:Common.Size_22.icon}" 

我需要使用這個圖標我的專欄,我嘗試了每一種通過一個包的聲明,它不起作用。最後,我決定以嵌入此位圖通過屬性發送它:

<mygrid:MyGridControl Model="{Binding}" Refresh="{Binding Refresh}" 
CommentsImageSource="{x:Static images:Common.Size_22.icon}" /> 

當我創建映像細胞我也必須創建使用位圖和BitmapImage的

image.Source = ToBitmapSource((System.Drawing.Bitmap)CommentsImageSource); 
之間的變換的圖像對象,並設置源

它的工作原理,但我對這個決議非常失望,有沒有更好的方法來做到這一點?我無法引用源文件以避免通過屬性發送Bitmap。

+0

如果您接受我的答案爲正確答案,那將會很好。謝謝! –

+0

完成,再次感謝! –

回答

4

當你有分配的ImageSource的代碼的機會,我用BitmapToBitmapSource(Resources.image_name)

public static BitmapSource BitmapToBitmapSource(Bitmap bitmap) 
{ 
    return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 
} 

這將創建你可以再指定爲您控制的ImageSource的一個的BitmapSource。

+0

很好的答案,我仍然在尋找更多關於減少解決方案的信息(不僅僅是這個部分)。感謝您的回答。 –

+0

+1!真的很好的答案。謝謝! – Sonhja

+0

該解決方案將整個位圖複製到RAM並且不處理任何類型的緩存。這意味着每次加載資源時都會分配它。 – MrAsterisco