Laden...

[erledigt] WPF: Äußerstes Grid ermitteln

Erstellt von m.grauber vor 11 Jahren Letzter Beitrag vor 11 Jahren 697 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren
[erledigt] WPF: Äußerstes Grid ermitteln

Hallo,

ich möchte das äußerste Grid in einem WPF-Window ermitteln. Den Namen habe ich leider nicht, da er immer anders lauten kann. In jedem Fenster verwende ich aber ein solches Grid.

mein Fenster steht im Parameter "object sender".


Window MeinFenster = (Window)sender;

VS gibt ja bereits in jedem Grid ein Fenster vor. Ich hoffe nun, dass ich irgendwie über MeinFenster auf das erste (äußerste) Grid komme. Nur wie?

  1. Muss ich wahrscheinlich statt nach Window zu casten ein Interface benutzen?

  2. Wie muss eine Methode LiefereAeusserstesGrid() lauten? - Ich habe da überhaupt keinen Ansatz. Ich vermute es muss eine Zeitaufwändige Sache über FindVisualChildren sein? Doch woher weiss ich, welches Grid das äußerste ist?

Danke für Eure Mühe!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

S
417 Beiträge seit 2008
vor 11 Jahren

Hallo,

das äußerste Grid, müsste ja auch im VisualTree vor allen anderen Grids kommen. Dann solltest du über den VisualTreeHelper an das erste Grid rankommen, z.B. mit folgender Methode:

public static T FindChild<T>(DependencyObject o)
	where T : DependencyObject
{
	if (o is T)
		return (T)o;

	var childCount = VisualTreeHelper.GetChildrenCount(o);

	for (int i = 0; i < childCount; i++)
	{
		var child = VisualTreeHelper.GetChild(o, i);
		var result = FindChild<T>(child);

		if (result != null)
			return result;
	}
	return null;
}

Verwendung:

Window MeinFenster = (Window)sender;
var outerGrid = FindChild<System.Windows.Controls.Grid>(MeinFenster);
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo Sarc,

vielen Dank für die schnelle Hilfe 👍

Diese Methode hatte ich auch schon in der Mache. Also gibt es keinen kürzeren Weg á la MainGrid() etc.

Ok. Dann wirds so gemacht.

Besten Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]