1

我想在以下位置添加图像MyCanvas

public class MyCanvas : Canvas
{
    private VisualCollection children;

    public MyCanvas()
    { this.children = new VisualCollection(this); }


    public void AddVisual(Visual visual)
    { this.children.Add(visual); }

    public void RemoveVisual(Visual visual)
    { this.children.Remove(visual); }

    public void ClearVisuals()
    { this.children.Clear(); }


    protected override int VisualChildrenCount
    {
        get
        { return this.children.Count; }
    }

    protected override Visual GetVisualChild(int index)
    { return this.children[index]; }
}

我试过:

my_canvas.Children.Add(my_image);
// or also
my_canvas.AddVisual(my_image);

my_image不会出现。有什么问题,我必须如何解决?谢谢。

4

2 回答 2

1

图像没有被渲染,因为我已经覆盖了 GetVisualChild 并且我只返回了我自己的视觉效果。由 Canvas 的子级生成的任何视觉效果都将被忽略。

由于我仍在直接使用视觉效果,因此我可能应该使用DrawingVisual对象和ImageSource而不是Image。在 DrawingVisual 中,我可以简单地使用DrawingContext.DrawImage方法渲染 ImageSource。

于 2012-05-18T08:21:56.100 回答
0

您的孩子可能缺少一些关键的属性值,例如它的宽度和高度是否不为零?

您可能希望在设计器中创建一个示例表单,查看它设置的属性,并在您的代码中执行相同的操作。

于 2012-05-17T16:40:05.600 回答