我有一个从画布继承的自定义绘图canvas。当我将ContentControl添加到带有以下代码的DrawdCanvas中时,什么都不会显示。

GraphicsRectangle rect = new GraphicsRectangle(0, 0, 200, 200, 5, Colors.Blue);
DrawingContainer host = new DrawingContainer(rect);

ContentControl control = new ContentControl();
control.Width = 200;
control.Height = 200;
DrawingCanvas.SetLeft(control, 100);
DrawingCanvas.SetTop(control, 100);
control.Style = Application.Current.Resources["DesignerItemStyle"] as Style;

control.Content = host;

drawingCanvas.Children.Add(control);

GraphicsRectangle是一个绘图视图,上面的构造函数绘制了(0,0)左上点和200个长度为graphicSretectangle的绘图的矩形。 DrawingContainer是一个框架工作,它有一个孩子,上面是构造函数。 Drawing Container实现了VETVISUALCHILD和VISUALCHILDRENCOUNT覆盖方法。最后,contentControl的内容属性设置为DrawtContainer,以便显示drawsvisual的内容。

当我将创建的ContentControl添加到常规画布中时,可以正确显示控件。我想原因是绘图canvas不实施storkeoverride方法。它仅实现MeateOverride方法。同样,DrawingContainer也不实现量度和安排替代方法。有任何想法吗?

有帮助吗?

解决方案

当我认为问题是在绘图仪中缺少Rectionoverride方法。通过添加到DrawdoverCanvas中的以下artectoverride方法,正确显示了contentControls。

protected override Size ArrangeOverride(Size arrangeSize)
{
    foreach (Visual child1 in children)
    {
        if (child1 is DrawingVisual)
            continue;

        ContentControl child = child1 as ContentControl;
        GraphicsBase content = ((DrawingContainer)(child.Content)).GraphicsObject;

        child.Arrange(new Rect(DrawingCanvas.GetLeft(child), DrawingCanvas.GetTop(child), content.Width, content.Height));
     }

     return arrangeSize;
}

其中GraphicsBase是GraphicSRectangle类的基础。为了找到图形基础的大小,我在图形构建器中设置的图形基础添加了宽度和高度属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top