图像在自定义画布中不可见(Canvas的派生类)

时间:2011-12-30 21:37:37

标签: c# .net wpf image wpf-controls

我在应用程序中有一个自定义画布,它没有显示图像,在XAML中,我写道:

<local:MyCanvas>
    <local:MyCanvas.LayoutTransform>
        <ScaleTransform x:Name="scale"  ScaleX="1" ScaleY="1" />
    </local:MyCanvas.LayoutTransform>
    <Image Source="C:\abc.jpg" />
</local:MyCanvas>

我在Canvas上尝试过它,但是它有效,但是在派生类中,它没有出现,但是Visual Studio显示了已添加图像的轮廓意义。

作为替代方案,在MyCanvas:Canvas类中,我输入:

Image img = new Image();
img.Width = 200;

BitmapImage myBitmapImage = new BitmapImage();

myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"C:\abc.jpg");

myBitmapImage.DecodePixelWidth = 200;
myBitmapImage.EndInit();

img.Source = myBitmapImage;

this.Children.Add(img);

仍然不可见。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我一直在尝试不同的东西,我已经能够通过将它封装在DrawingVisual中来添加图像,这里是代码:

private void addImage (DrawingContext dc)
{
BitmapImage bi = new BitmapImage();

bi.BeginInit();
bi.UriSource = new Uri(@"C:/abc.jpg");
bi.EndInit();

dc.DrawImage(bi, new Rect(new Point(0,0), new Point(200,200)));
}

然后将DrawingVisual添加到自定义Canvas中,这里是代码:

DrawingVisual abc = new DrawingVisual();
DrawingContext dc = abc.RenderOpen ();
addImage (dc)
dc.Close();

base.AddVisualChild(abc);
base.addLogicalChild(abc);

使用此方法,图像可见,并且工作正常。

但为什么不使用以前的方法添加到MyCanvas?