Ich bin auf der Suche nach einer zuverlässigen Methode zum Erstellen einer Liste von Steuerelementen von & lt; Type & gt; in einem bestimmten & lt; Panel & gt; abgeleitete Kontrolle - das schließt diejenigen ein, die direkte Kinder sind, und solche, die Kinder von Kindern sind, und so weiter.
Der offensichtlichste Weg war, es rekursiv zu tun:
Fügen Sie zur Liste alle untergeordneten Elemente dieses Steuerelements von & lt; Type & gt; hinzu, und wiederholen Sie dann die Funktion für jedes untergeordnete Element dieses Steuerelements, bei dem es sich um & lt; Panel & gt; oder Nachkomme.
Ich bin jedoch besorgt, dass dies nicht alle Steuerelemente in der Struktur finden wird - jedes ContentControl könnte auch ein Steuerelement von & lt; Type & gt; enthalten, ebenso wie HeaderedContentControl oder ein anderes ähnliches Steuerelement mit einem oder mehreren Kind / Inhaltsattributen .
Gibt es eine Möglichkeit, eine Suche gegen die tatsächliche Layoutstruktur auszuführen, sodass beliebige Instanz eines bestimmten Steuerelementtyps ohne einen bestimmten übergeordneten Element gefunden werden kann?
Hier ist eine ziemlich naive Erweiterungsmethode: -
%Vor%Dieser Ansatz hat den Nachteil, dass er davon ausgeht, dass während der Baumzugehörigkeit keine Änderungen stattfinden. Dies könnte durch Verwendung einer ToList () im Gebrauch gemildert werden.
Jetzt können Sie Ihre Anforderungen mit LINQ umsetzen: -
%Vor%Angenommen, Sie möchten in einem userControl Comboboxen finden, die mit einem GRID beginnen und verschachtelte Grids, Stackpanels, Canvas usw. mit Comboboxen enthalten.
Imports System.Windows.Controls.Primitives
(oder Verwenden für C #) Dim ListOfComboBoxes = MAINGRID.GetVisualDescendants.OfType(Of ComboBox)
Das ist es ...
Tags und Links .net silverlight silverlight-3.0 controls children