我有一个带有很多System.Drawing.Image资源的dll,我已将其包装到静态属性中,因此我可以动态更新它们。
我想在WPF应用程序中通过xaml使用图像,但我能想到的唯一方法是手动执行代码。
有没有办法在xaml中的静态属性上进行winform到wpf图像转换?
答案 0 :(得分:5)
您可以使用转换器直接绑定到您的图像。以下是窗口中的示例:
<Window.Resources>
<WinForms2WPFImageConverter x:Key="WF2WPFDrawingConverter" />
</Window.Resources>
...
This SO question有一个绘图转换器,我在这里作为ValueConverter使用。
public class WinForms2WPFImageConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
System.Drawing.Image i = (System.Drawing.Image) value;
using (MemoryStream drawingStream = new MemoryStream())
{
i.Save(drawingStream);
i.Seek(0, SeekOrigin.Begin);
return System.Windows.Media.Imaging.BitmapFrame.Create(drawingStream);
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new InvalidOperationException();
}
}
当然,您需要在资源声明中考虑名称空间。
我建议不要使用静态属性,以便利用INotifyPropertyChanged(或依赖项属性),以便当属性指向其他图像时,显示会自动更改。
(注意:这是键入的,不是从VS复制的,所以某处可能存在语法错误。)
答案 1 :(得分:1)
您可以使用WPF中的方法绑定到您的图像。以下是链接中的示例
http://microsoftdotnetsolutions.blogspot.com/2016/07/convert-winforms-image-to-wpf.html