Ich habe eine benutzerdefinierte DrawingCanvas, die von Canvas übernommen wird. Wenn ich ein ContentControl zu DrawingCanvas mit dem folgenden Code hinzufüge, wird nichts angezeigt.WPF - Hinzufügen von ContentControl zu benutzerdefinierten Canvas
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 ist ein DrawingVisual und der Konstruktor oben zieht einen Rect mit (0,0) obere linke Punkt und einer Länge von 200 zu dem DrawingContext von GraphicsRectangle. DrawingContainer ist ein FrameworkElement und es hat ein Kind, das direkt über dem Konstruktor liegt. DrawingContainer implementiert die Override-Methoden GetVisualChild und VisualChildrenCount. Zum Schluss wird die Content-Eigenschaft von ContentControl auf DrawingContainer gesetzt, um den Inhalt von DrawingVisual anzeigen zu können.
Wenn ich das erstellte ContentControl zu einem regulären Canvas hinzufügen, wird die Steuerung korrekt angezeigt. Ich denke, der Grund ist, dass DrawingCanvas die Methode ArrangeOverride nicht implementiert. Es implementiert nur die MeasureOverride-Methode. DrawingContainer implementiert auch nicht Measure und Arrangier Override-Methoden. Irgendwelche Ideen?
Dies ist, was ich gesucht habe, aber was ist DrawingContainer, GraphicsBase und GraphicsObject. Keine von beiden ist in Visual Studio (NET.4) bekannt. Ist es selbst definiert Klassen. –
Ja, das sind sie. Ich habe DrawingContainer erstellt und GraphicsBase, GraphicsObject von http://www.codeproject.com/KB/WPF/WPF_DrawTools.aspx genommen –