Canvas에서 상속 된 사용자 지정 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로 (0,0)과 좌측 상단 점 (200)의 길이의 사각형을 그린다. DrawingContainer는 FrameworkElement이며 하나의 자식을가집니다.이 자식은 위의 rect이며 생성자와 함께 제공됩니다. 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에서 가져 왔습니다. –