Silverlight: есть ли событие, которое запускается в FrameworkElement перед его визуализацией?

В нашем проекте Silverlight 2 мы создали присоединенное свойство для выполнения преобразования «на лету» в текстовые свойства различных пользовательских элементов управления. Для этого мы перехватываем событие Loaded объекта FrameworkElement, когда свойство установлено. Когда событие срабатывает, мы берем существующее значение текстового свойства и выполняем с ним несколько простых подстановок строк, прежде чем заменить значение свойства переведенным текстом. Однако это приводит к тому, что элемент управления отображается с непереведенным текстом, после чего текст быстро заменяется переведенной версией.

Есть ли альтернативное событие, которое мы можем перехватить, которое сработает до того, как элемент управления будет отрисован?


person X-Cubed    schedule 09.06.2009    source источник


Ответы (2)


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

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

person X-Cubed    schedule 24.08.2009

Я не совсем уверен в этом, но можете ли вы использовать событие LayoutUpdated. Он будет срабатывать при изменении размера элемента управления и т. д. (вы можете принять меры, чтобы ваш код выполнялся только один раз).

Я знаю, что это не похоже на «правильное» событие для этого, но, к сожалению, Silverlight оставляет вас стоять там, держа его, когда дело доходит до событий.

person Josh    schedule 09.06.2009
comment
Проблема в том, что событие LayoutUpdated не предоставляет значение для отправителя, поэтому я не могу определить, у какого FrameworkElement был обновлен макет. - person X-Cubed; 12.06.2009