none
Aufruf von Steuerelementen RRS feed

  • Frage

  • Hallo,

    ist es in C# möglich, die Eigenschaften eines Steuerelements zur Laufzeit zu verändern, wenn nur die Art des Steuerelements bekannt ist (also Button), der Name aber unbekannt und nur in einer String-Variablen gespeichert ist?

    Danke im Voraus

    Freitag, 7. Juni 2013 13:37

Antworten

  • Hallo, ja das geht. Ich nehme mal an das du die Controls dynamisch zur Laufzeit erzeugst und damit zwangswqeise keine Variable hast. Es gibt einige möglichkeiten um nun an das Control heran zu kommen. Unter anderem kann man alle Controls im Container durchgehen und nach Buttons filtern und noch mit dem Namen vergleichen.

    Hinweis: In meinen Nachfolgenden Codes werden mehrere Buttons in einem Grid "root" liegen. Dort möchte ich immer die Beschriftung des Buttons "btn1" ändern.

                foreach(UIElement c in root.Children)//Alle Controls durchgehen
                {
                    if (c is Button)//Nur Buttons auswählen
                    {
                        if ((c as Button).Name == "btn1")//Namen abgleichen
                        {
                            Button b = c as Button;//Button casten
                            b.Content = "Neuer Text";//Text zuweisen
                        }
                    }
                }

    Kürzer und effektiver mit LINQ:

                Button b = (from x in root.Children
                            where x is Button && (x as Button).Name == "btn1"
                            select x).First() as Button;
                b.Content = "Neuer Text";

    In WPF gibts noch den VisualTreeHelper, aber der wird in Win8 Apps nicht im vollen Umfang unterstützt.

    Wenn du auch die Kinder von Containerelementen (Grid, Bortder, ...) in root durchsuchen willst, dann brauchst du eine rekursive Funktion.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets | Twitter
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    • Als Antwort markiert Peter Meier Montag, 10. Juni 2013 16:27
    Freitag, 7. Juni 2013 14:41