2011-01-09 15 views
1

私はキャンバスから継承されたカスタムDrawingCanvasを持っています。次のコードでDrawingCanvasにContentControlを追加すると何も表示されません。WPF - カスタムキャンバスにContentControlを追加

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であり、上記のコンストラクタはGraphicsRectangleのDrawingContextでは200の(0,0)の左上の点と長さとのRectを描きます。 DrawingContainerはFrameworkElementであり、コンストラクタで与えられた1つの子を持ちます。 DrawingContainerはGetVisualChildメソッドとVisualChildrenCountメソッドをオーバーライドします。最後に、ContentControlのContentプロパティがDrawingContainerに設定され、DrawingVisualのコンテンツを表示できるようになります。

作成したContentControlを通常のCanvasに追加すると、コントロールが正しく表示されます。私はDrawingCanvasがArrangeOverrideメソッドを実装していないという理由があると思います。 MeasureOverrideメソッドのみを実装します。また、DrawingContainerはMeasureと アライメントオーバーライドメソッドを実装していません。何か案は?

+0

これは私が探していたものですが、DrawingContainer、GraphicsBase、およびGraphicsObjectは何ですか。 どちらもvisualstudio(NET.4)で知られていません。 いくつかの自己定義クラスですか? –

+0

はいそうです。 DrawingContainerを作成し、GraphicsBase、GraphicsObjectをhttp://www.codeproject.com/KB/WPF/WPF_DrawTools.aspxから取得しました。 –

答えて

1

私は問題がDrawingCanvasのArrangeOverrideメソッドがないと思っていました。次のArrangeOverrideメソッドをDrawingCanvasに追加すると、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クラスのベースです。 GraphicsBaseのサイズを調べるために、GraphicsBaseにGraphicsRectangleのコンストラクタで設定されているwidthプロパティとheightプロパティを追加しました。

関連する問題