Поиск динамически генерируемых элементов управления Wcf с помощью FindName()
Метод FramworkElement.FindName() для нахождения элемента управления в родительском элементе управления выглядит так, как будто он должен быть прямым...
Но я поднимаю анти, и кажется, что фреймворку не нравится то, что я пытаюсь сделать.
Прежде всего, я понимаю, что есть много разных способов ведения дел, и имейте в виду, что это первая форма, которую я создаю в WPF.
Я загружаю элементы управления в StackPanel в зависимости от количества элементов в коллекции. Этот метод является обязательным, так как коллекция определяется количеством каталогов внутри [URL-адрес, введенный пользователем].
Список строит горизонтальные стековые панели в вертикальную стековую панель, которая помещается в форму во время проектирования.
Таким образом, dirStackPanel находится на форме. Я вставляю controlStackPanel в dirStackPanel n раз и называю каждое идентифицирующим именем: (строка)("controlStackPanel" + n).
Я также заполняю controlStackPanel элементами управления, но это спорный вопрос, учитывая, что я не могу извлечь controlstackPanel из его родителя (dirStackPanel) по имени.
пример:
var getPanel = (StackPanel) this.dirStackPanel.FindName((string)("controlStackPanel" + n))
Возвращает Нуль
Таким образом, чтобы быть ясным, каждому элементу управления, который я вставляю в ВРЕМЯ РАБОТЫ, присваивается имя, и его можно легко получить с помощью цикла. Но метод FindName не будет работать с первым дочерним элементом управления родительского элемента "StackPanel". Он продолжает возвращать ноль, а не объект.
Есть идеи?
1 ответ
Если вы создаете элементы управления динамически, вы должны сначала вызвать RegisterName, чтобы иметь возможность их найти.
Например:
dirStackPanel.RegisterName(controlStackPanel.Name, controlStackPanel);