【问题标题】:WPF cannot implicitly convert system.drawing.bitmap to media.brushWPF 无法将 system.drawing.bitmap 隐式转换为 media.brush
【发布时间】:2013-12-15 22:27:59
【问题描述】:

我想在我的 WPF 应用中手动更改按钮的背景。

我有一张图片导入到我的资源中,我想做:

MyButton.Background = MyProject.Properties.Resources.myImage;

但我得到了错误:

无法将 system.drawing.bitmap 隐式转换为 media.brush

我该怎么做??

【问题讨论】:

  • Background 是错误的属性,你需要像 BackgroundImage 这样的东西
  • @CSharpie 你错了,Background 是正确的属性。您需要将其设置为ImageBrush
  • 哦,好的。今天学到了新东西:)

标签: c# wpf xaml


【解决方案1】:

您应该先阅读有关画笔的内容here

然后使用ImageBrush,类似这样:

MyButton.Background = new ImageBrush(...);

(或者,也许,将画笔放入资源中......)

更新

您可以轻松找到如何从位图创建 imageSource。例如,here。喜欢:

var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(),
                                  IntPtr.Zero,
                                  Int32Rect.Empty,
                                  BitmapSizeOptions.FromEmptyOptions());
MyButton.Background = new ImageBrush(bitmapSource);

【讨论】:

  • 这不起作用,因为myImage 的类型是System.Drawing.Bitmap
  • 我添加了一种将位图转换为源的方法
【解决方案2】:

在 WPF 应用程序中,您通常不会像在 WinForms 中那样添加图像资源。

您可以将图像文件直接添加到您的 Visual Studio 项目中,就像任何其他文件一样。如果有多个图像,将它们放在项目的子文件夹中可能是有意义的(例如,称为“图像”)。该文件的Build Action 必须设置为Resource(这是图像文件的默认值)。

现在您可以从Pack URI 到该文件创建BitmapImage

最后,您从BitmapImage 创建一个ImageBrush 以设置Background 属性。

var uri = new Uri("pack://application:,,,/images/myImage.jpg");
var image = new BitmapImage(uri);
MyButton.Background = new ImageBrush(image);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2020-06-11
    • 2019-10-21
    • 2010-11-15
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多