我有一个从 Canvas 继承的自定义 DrawingCanvas。当我使用以下代码将 ContentControl 添加到 DrawingCanvas 时,没有显示任何内容。
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 是一个 DrawingVisual,上面的构造函数将左上角 (0,0) 点和长度为 200 的 Rect 绘制到 GraphicsRectangle 的绘图上下文中。DrawingContainer 是一个 FrameworkElement,它有一个子元素,它是上面的矩形,带有构造函数。DrawingContainer 实现 GetVisualChild 和 VisualChildrenCount 覆盖方法。最后,将 ContentControl 的 Content 属性设置为 DrawingContainer,以便能够显示 DrawingVisual 的内容。
当我将创建的 ContentControl 添加到常规 Canvas 时,控件会正确显示。我猜原因是 DrawingCanvas 没有实现 ArrangeOverride 方法。它只实现 MeasureOverride 方法。此外,DrawingContainer 不实现 Measure 和 Arrange 覆盖方法。有任何想法吗?