Сильверлайт:Существует ли событие, которое срабатывает в FrameworkElement перед его визуализацией?
-
13-09-2019 - |
Вопрос
В нашем проекте Silverlight 2 мы создали прикрепленное свойство для оперативного преобразования текстовых свойств различных пользовательских элементов управления.Для этого мы перехватываем событие Loaded FrameworkElement
когда свойство установлено.Когда событие срабатывает, мы берем существующее значение свойства text и выполняем в нем несколько простых строковых замен, прежде чем заменять значение свойства переведенным текстом.Однако это приводит к тому, что элемент управления отображается с непереведенным текстом, а затем текст быстро заменяется переведенной версией.
Есть ли альтернативное событие, которое мы можем перехватить, которое будет срабатывать до того, как элемент управления будет отображен?
Решение
Я изменил свой код так, что теперь он выполняет перевод, как только вызывается установщик прикрепленного свойства.Нет необходимости ждать, пока FrameworkElement
завершить загрузку, так как я могу изменить свойство Text задолго до того, как элемент будет отображен.
Мои первоначальные мысли об использовании события Loaded заключались в том, чтобы сократить время запуска приложения за счет перевода только тех элементов управления, которые были видны на экране.Как оказалось, я дублирую часть работы, выполняемой средой выполнения, поскольку среда выполнения в любом случае не будет вызывать установщик свойств до тех пор, пока в этом не возникнет необходимость.
Другие советы
Я не совсем уверен в этом, но можете ли вы использовать LayoutUpdated
событие.Он сработает, когда размер элемента управления будет изменен и тому подобное (вы можете принять меры, чтобы ваш код выполнялся только один раз).
Я знаю, что это не похоже на «подходящее» событие для этого, но, к сожалению, Silverlight заставляет вас стоять и удерживать его, когда дело доходит до событий.