Как я могу узнать, когда в Silverlight добавлен новый UIElement - PullRequest
2 голосов
/ 18 апреля 2009

Я создаю пользовательский элемент управления в лучах света, который наследуется от canvas. Мне необходимо выяснить, когда в свойство Children MyBase добавлено новое UIElement, но нет события, подобного ItemAdded. Поскольку я хочу анимировать детей моего холста, я не могу использовать событие LayoutUpdated (оно было обработано миллион раз).

Ответы [ 2 ]

1 голос
/ 18 апреля 2009

Когда дочерний элемент добавляется / удаляется Canvas, он автоматически становится недействительным, так что происходит цикл измерения / упорядочения. Таким образом, вам не нужно явно отслеживать операции добавления / удаления.

Вместо этого вам просто нужно переопределить метод MeasureOverride, а затем внутри метода вы можете посмотреть на набор Children и заметить, что изменилось. Это одна из областей, которую Silverlight использовать гораздо сложнее, чем WPF. Вы не можете предоставить собственную коллекцию для хранения дочерних элементов, например WPF, и не можете подключить событие к существующей коллекции Children.

0 голосов
/ 11 августа 2009

Обратите внимание, что у меня нет срока действия Silverlight, но в WPF вы можете использовать события Loaded и Initialized для элемента управления.

Подробнее о блоге Майка Хиллберга из MSDN

Инициализированное событие

Обычно инициализируется событие когда свойства элемента имеют все было установлено. В частности, FrameworkElement / FrameworkContentElement реализовать ISupportInitialize, и когда метод EndInit этого интерфейса называется свойство IsInitialized устанавливается в значение true, а инициализированный событие сработало.

Загруженное событие

Событие Loaded срабатывает, когда элемент не только инициализируется, но и собирается быть оказанным. Мотивация для загруженного события является типичным сценарий, где вы хотите сделать некоторые инициализация в вашем приложении на время загрузки.

...