【发布时间】:2010-07-03 05:48:42
【问题描述】:
我的情况如下。我正在为我儿子创建一个小数学测验应用程序,并希望在回答每个问题后动态更改画布的背景 ImageBrush。我开始将我的图像(png)嵌入到一个资源文件中,并认为我会将它们加载到一个数组中,然后随机选择一个并将其加载到画布中。
我遇到的第一个问题当然是资源文件中的图像被存储为位图。所以在网上浏览了一番后,我终于想出了如何使用以下帮助方法将它们从 Bitmap 转换为 BitmapImage 对象:
private BitmapImage FromResourceBitmap(Bitmap bitmap)
{
var result = new BitmapImage();
using(var stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
stream.Position = 0;
result.BeginInit();
result.StreamSource = stream;
result.EndInit();
}
return result;
}
从那里我从 BitmapImage 创建了一个 ImageBrush 并将其分配给画布的 Background 属性:
var brush = new ImageBrush {ImageSource = m_Media.Screens[0]}; // m_Media.Screens[x] returns a BitmapImage...obviously.
QuestionCanvas.Background = brush;
不幸的是,这似乎不起作用。当应用程序运行时,背景是纯白色的。我的 XAML 没有描述任何背景,而且……我很困惑。任何帮助将不胜感激!谢谢!
【问题讨论】:
-
如果您在更改背景属性后尝试调整窗口大小会发生什么?我的直觉说这是一个刷新问题。除此之外,该方法可能有问题。首先尝试使其与静态资源一起使用,一旦确定,您可以尝试直接从该方法中进行操作?
-
这是我最初的想法。我曾尝试调用任何“无效”方法来导致重绘,但什么也没发生。调整大小、最小化、最大化等,也无济于事。不过,我想我想通了,会在几分钟内发布答案。
标签: c# wpf wpf-controls canvas