Ich habe den folgenden Code in meiner WPF-Anwendung:WPF Form Begrenzungsrechteck ist immer leer
public MainWindow()
{
InitializeComponent();
p1 = new Point(50, 50);
p2 = new Point(355, 50);
p3 = new Point(50, 355);
p4 = new Point(355, 355);
Loaded += (x, y) => Draw();
//ContentRendered += (x, y) => Draw();
}
ich eine Polygonform erstellen und versuchen, sein Begrenzungsrechteck mehr Möglichkeiten, um:
private void Draw()
{
Polygon polygon = new Polygon();
polygon.Stroke = System.Windows.Media.Brushes.White;
polygon.Points.Add(p1);
polygon.Points.Add(p2);
polygon.Points.Add(p3);
polygon.Points.Add(p4);
canvas.Children.Add(polygon);
boundingRect = polygon.TransformToVisual(canvas).TransformBounds(new Rect(polygon.RenderSize));
boundingRect = polygon.TransformToVisual(polygon).TransformBounds(System.Windows.Controls.Primitives.LayoutInformation.GetLayoutSlot(polygon));
boundingRect = polygon.RenderTransform.TransformBounds(new Rect(polygon.RenderSize));
boundingRect = GetRectOfObject(polygon);
boundingRect = polygon.RenderedGeometry.Bounds;
}
private Rect GetRectOfObject(FrameworkElement _element)
{
Rect rectangleBounds = new Rect();
rectangleBounds = _element.RenderTransform.TransformBounds(new Rect(0, 0, _element.ActualWidth, _element.ActualHeight));
return rectangleBounds;
}
Allerdings bekomme ich immer {0; 0; 0; 0}.
Auf debug, kann ich die Punkte sehen, aber seine Größe ist 0 gemacht:
Wie soll ich die richtige Art und Weise zu berechnen?
Sie müssen wahrscheinlich [Measure] (https://msdn.microsoft.com/en-us/library/system.windows.uielement.measure (v = vs.110) .aspx) und/oder [Anordnen] aufrufen ] (https://msdn.microsoft.com/en-us/library/system.windows.uielement.arrange (v = vs.110) .aspx) auf dem Rechteck, um es richtig zu rendern – ChrisF
Sie meinen, dass ich sollte _manuell berechnen_ die Größe dessen, was die Form benötigt, und _dann_ bekomme ich die Begrenzungsgröße? Da sich die Form dynamisch ändert, kann ich nicht die Größe des benötigten Platzes angeben - das ist es, was ich von dem WPF-Framework erwarte - anstatt von mir. Gemäß den Lebenszyklusereignissen gibt es kein visuelles Rendering nach dem geladenen Ereignis, also sollte das Layout im Grunde bereit sein: http://www.codeproject.com/Articles/403418/Lifetime-events-of-a-WPF-application – Nestor