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のdrawingContextに描画します。DrawingContainerはFrameworkElementであり、コンストラクターで指定された1つの子があります。DrawingContainerは、GetVisualChildおよびVisualChildrenCountオーバーライドメソッドを実装します。最後に、ContentControlのContentプロパティがDrawingContainerに設定され、DrawingVisualのコンテンツを表示できるようになります。
作成したContentControlを通常のCanvasに追加すると、コントロールが正しく表示されます。その理由は、DrawingCanvasがArrangeOverrideメソッドを実装していないためだと思います。MeasureOverrideメソッドのみを実装します。また、DrawingContainerはMeasureおよびArrangeオーバーライドメソッドを実装していません。何か案は?