2016-06-29 11 views
1

Ich habe dynamisch hinzugefügte Steuerelemente in meinem XAML UI. Wie kann ich ein bestimmtes Steuerelement mit einem Namen finden.Wie finden Sie ein Steuerelement mit einem bestimmten Namen in einer XAML-Benutzeroberfläche mit C# -Code?

+2

Willkommen bei Stackoverflow! Bitte überprüfen Sie, wie Sie eine gute Frage stellen können, da diese Frage eine sehr niedrige Qualität hat und nicht den Mindeststandards entspricht. Vielen Dank! http://stackoverflow.com/help/how-to-ask –

Antwort

5

Es gibt eine Möglichkeit, das zu tun. Sie können die VisualTreeHelper verwenden, um durch alle Objekte auf dem Bildschirm zu gehen. Eine bequeme Methode, die ich verwenden (es von der Bahn irgendwo erhalten) ist die FindControl Methode:

public static T FindControl<T>(UIElement parent, Type targetType, string ControlName) where T : FrameworkElement 
{ 

    if (parent == null) return null; 

    if (parent.GetType() == targetType && ((T)parent).Name == ControlName) 
    { 
        return (T)parent; 
    } 
    T result = null; 
    int count = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < count; i++) 
    { 
        UIElement child = (UIElement)VisualTreeHelper.GetChild(parent, i); 

        if (FindControl<T>(child, targetType, ControlName) != null) 
        { 
            result = FindControl<T>(child, targetType, ControlName); 
            break; 
        } 
    } 
    return result; 
} 

Sie können es wie folgt verwenden:

var combo = ControlHelper.FindControl<ComboBox>(this, typeof(ComboBox), "ComboBox123"); 
+0

Würde [FindName] (https://msdn.microsoft.com/en-us/library/system.windows.framework.findname (v = vs.110) .aspx) funktioniert auch? –

0

Wenn Sie das Steuerelement in XAML erstellen, können Sie ihm einen x:Name="..." Tag geben. In der entsprechenden C# -Klasse ist die Control unter diesem Namen verfügbar.
Einige Containeransichten wie Grid haben eine Children Eigenschaft, mit der Sie nach Steuerelementen in ihnen suchen können.