私はキャンバスから継承されたカスタム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と アライメントオーバーライドメソッドを実装していません。何か案は?
これは私が探していたものですが、DrawingContainer、GraphicsBase、およびGraphicsObjectは何ですか。 どちらもvisualstudio(NET.4)で知られていません。 いくつかの自己定義クラスですか? –
はいそうです。 DrawingContainerを作成し、GraphicsBase、GraphicsObjectをhttp://www.codeproject.com/KB/WPF/WPF_DrawTools.aspxから取得しました。 –