将图像添加到画布时得到空白结果

时间:2012-11-05 11:10:47

标签: c# windows-phone-7 windows-phone windows-phone-7.1.1

我是Windows Phone Dev的新手,我打算这样做:

  1. 使用图像A设置画布背景;
  2. 在图像A上添加另一个图像B.
  3. 我取得的成就

    通过使用ImageBrush,我可以设置画布背景图像,但在尝试使用Canvas.Children.Add(imageB)将imageB放在图像A的顶部时出现问题。运行应用程序时,它只显示我在顶部没有imageB的imageA。

    没有空引用异常,我确信图像A和B都已加载。

    我的问题是:如何设置画布以显示ImageB并保持imageB响应操纵事件,以便我可以在以后触摸并移动它?

    这是我的相关代码:

    ImageBrush brush = new ImageBrush();
    Image imageB = new Image();
    imageB.Source = new BitmapImage(new Uri("/Assets/imageB.png", UriKind.Relative));
    
    //...here I set the ImageBrush as imageA
    canvas.Background = brush; // Can display imageA 
    
    canvas.Children.Add(imageB);
    imageB.ManipulationDelta += ImageB_ManipulationDelta;
    imageB.ManipulationCompleted += ImageB_ManipulationCompleted;
    

    我坚持将图像B置于图像A之上的原因是我打算在图像B上设置EventHandler,以便我可以使用图像B来回复ManipulationDelta事件。

    我做了一些研究:

    Windowsphone geek: Working with Images

    Windows Phone 7 dragging and flicking UI

    但没有运气。

    感谢您的帮助: - )

3 个答案:

答案 0 :(得分:0)

您的代码看起来像是创建了一个名为Image的{​​{1}},但您从未设置它。这条线

imageB

看起来很奇怪,不应该是

Image.Source = new BitmapImage(new Uri("/Assets/imageB.png", UriKind.Relative));

答案 1 :(得分:0)

我想我刚刚找到问题所在:

我没有设置Canvas.SetLeftCanvas.SetTop,我应该在使用canvas.Children.Add()之前添加两行:

...
Canvas.SetLeft(imageB, point.X);
Canvas.SetTop(imageB, point.Y);
canvas.Children.Add(imageB);
...

和中提琴,问题解决了。

答案 2 :(得分:0)

我和你有同样的问题。经过大量搜索后我终于找到了解决方案。 此代码将按预期工作:

BitmapImage img = new BitmapImage(new Uri("Assets/imageB.png", UriKind.Relative));
img.CreateOptions = BitmapCreateOptions.None;
Image imageB = new Image();
imageB.Source = img;
img.ImageOpened += (s, e) =>
{
    canvas.Children.Add(imageB);
};