Не удается найти динамически сгенерированный элемент управления, используя 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
, вы сможете найти динамически созданный элемент.