Не удается найти динамически сгенерированный элемент управления, используя FindName() в WPF

Мне нужно динамически генерировать столько ярлыков, сколько я хочу, и получать доступ к каждому из них при желании. но FindName() не работал...

Вот простой пример того, что я делаю

У меня есть пользовательский класс, унаследованный от Label класс, называемый myLabel. Я положил кнопку на мой проект WPF. Нажав на него, экземпляр класса myLabel будет динамически создан и добавлен в сетку (myGrid) следующим образом:

myLabel LBL = new myLabel();
LBL.Height = 30;
LBL.Name = "MyLabel1";
LBL.Content = "I am a label.";
myGrid.Children.Add(LBL);

Есть еще одна кнопка под названием "Изменить цвет", которая должна найти ранее созданную метку и изменить ее цвет переднего плана. Вот код внутри события нажатия этой кнопки:

Label Thelabel = (Label)myGrid.FindName("MyLabel1");
Thelabel.Foreground = Brushes.Azure;

Проблема в том, что FindName() никогда ничего не находит и всегда ноль! Как я могу решить эту проблему?

2 ответа

Решение

Могут быть проблемы с определением области имен, которые приводят к тому, что FindName возвращает null.

Объяснение другого метода поиска конкретного именованного элемента, начиная с родителя / предка, можно найти в этом посте: Как я могу найти элементы управления WPF по имени или типу?

попробуйте и посмотрите, работает ли он для вас.

На самом деле основная причина невозможности найти динамический элемент управления заключается в том, что элемент управления не был предварительно зарегистрирован.

См.: https://learn.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.registername .

Предполагая, что пользовательский элемент управления с именемHello

      Hello myHello = new Hello();
myHello.Visibility = Visibility.Visible;
myHello.Name = "HelloWorld";
RegisterName("HelloWorld", myHello);

someGrid.Children.Add(myHello);

СRegisterName, вы сможете найти динамически созданный элемент.

Другие вопросы по тегам