WPF背景设置失败

时间:2010-04-29 12:07:07

标签: wpf

这是一段代码。

var image = new BitmapImage(new Uri(@"pack://application:,,,/Images/background.png",
          UriKind.RelativeOrAbsolute));

   var backgroundBrush = new ImageBrush()
   {
    ImageSource = image,
    Viewport = new Rect(0, 0, image.PixelWidth / ActualWidth,
          image.PixelHeight / ActualHeight),
    TileMode = TileMode.Tile,
    Stretch  = Stretch.None,
   };

   // Set it for the main window.
   Background = backgroundBrush;

使用XPSP3和.Net 4.0在我的电脑上工作得很好。但是,当我使用Windows 7 Home Premium在Eee PC T91MT上运行相同的样本时,它会失败。没有例外,但没有绘制任何内容(如果使用的话,会绘制纯色画笔)。我认为这可能是资源有限的结果,但在Viliv S5上,它具有相同的规格,它也可以正常工作。

有什么想法吗?

谢谢!


更新

问题的根源是Viewport的rect。由于位图的窗口大小为X的两倍,因此rect为(0,0,2,1)。因此,在带有XPSP3的电脑上,会绘制左半部分的图像。但是在Eee PC上,它会导致可视化问题。

1 个答案:

答案 0 :(得分:1)

答案只是规范视口矩形。例如。而不是(0,0,2,1)我必须将其设置为(0,0,1,0.5)。

我不确定,但看起来WPF只是将矩形值(经过一些转换后)传输到D3D驱动程序中,而D3D驱动程序能够(或不能)以正确的方式处理它。因此,非规范化的rect视口可以在基于GeForce的机器上运行,但不会在Eee PC上使用它的集成视频驱动程序。