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

StackOverflow https://stackoverflow.com/questions/967783

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top