Children.Add () и RegisterName () - PullRequest
       34

Children.Add () и RegisterName ()

2 голосов
/ 06 мая 2011

В настоящее время тянет волосы за следующую проблему. Мой код добавляет Rectangle s к Grid следующим образом:

Dim rect As Rectangle
' Set a bunch of properties of rect here'

myGrid.Children.Add(rect)

Раньше он работал красиво, пока мне не нужно было найти мои прямоугольники в сетке. Я только что провел час, пытаясь понять, как именно использовать RegisterName(), но, увы, у меня ничего не получается.

Должно ли это быть myGrid.RegisterName(rect.Name, rect), rect.RegisterName(rect.Name, myGrid) или что-то еще?

Должен ли я сделать это до, после или вместо myGrid.Children.Add(rect). Я пробовал каждую комбинацию, и прямоугольники просто больше не отображаются на сетке.

Ответы [ 2 ]

0 голосов
/ 10 мая 2011

Поскольку никакие ответы здесь не помогли мне, я опубликую свое (полу) решение. Я читал на нескольких сайтах и ​​форумах, как правило, не хорошая практика для использования FindName таким образом. Это действительно для разбора существующего кода XAML, все остальное граничит с взломом метода.

Такие вещи, как VisualtreeHelper и некоторые другие уловки, могут помочь получить правильные элементы графического интерфейса. Можно всегда перебирать все доступные элементы, если их не слишком много, а производительность не является большой проблемой (в моем случае). Я сделал это, просто создав массив ссылок на все соответствующие элементы интерфейса и нашел их таким образом. Ваше решение может отличаться в зависимости от реализации и дизайна. Мое решение не является идеальным и элегантным, но оно делает работу практически без ущерба для производительности.

0 голосов
/ 06 мая 2011

Я не думаю, что вам нужно явно вызывать RegisterName ... Rectangle имеет свойство Name, как и все FrameworkElement s, так что вы можете просто позвонить FindName на родителя и найти Rectangle ...

...