Продолжу.
В прошлом посте я описал свой подход к локализации Xaml. При разработке локализуемого GUI в WPF с использованием данного подхода есть один сценарий, в котором вышеописанное решение не сработает - это текст внутри TextBlock'а, отформатированный при помощи модели документов WPF. Для иллюстрации приведу пример:
-, который в другой локали может выглядеть например вот так:
как вы понимаете в данном случае сами строки в ресурсы уже не положишь, т.к. они не содержат информации о форматировании. Поэтому в случае необходимости локализации форматированного текста было решено в ресурсах хранить Xaml. Но как его отображать, не переписывая в code-behind бесконечное количество раз код загрузки Xaml? Ответ - custom control. Его функция - отображение loose-xaml (xaml в runtime).
Собственно абсолютно ничего сложного в этом контроле нет и наверное он и не заслужил бы упоминания, если бы не всплыл сценарий локализации форматированного текста.
Работает он следующим образом:
- у контрола есть 2 режима работы: Host (наш случай - статичное отборажение отрендеренного Xaml) и Edit (вариант, в котором Xaml можно редактировать и просматривать результат "на лету" - в этом случае у него сверху появится TextBox для редактирования Xaml).
- свойству Xaml присваивается строковое значение;
- code-behind парсит и инстанцирует объекты (в нашем случае TextBlock с коллекцией Inline'ов) из свойства Xaml при помощи класса XamlReader и полученный объект присвает своему свойству Content;
- Content привязан к ScrollViewer'у объявленному в default style;
- Если в проссе разбора xaml произойдет XamlParseException, то контрол схватит его и отобразит сообщение ( что очень полезно при ручном наборе xaml =)), этот сценарий управляется триггером default стиля повешенного на изменение свойства IsInvalidXaml.
Xaml в ресурсах же выглядит вот так:
И вот так все будет выглядеть "в сборе":
Чего нехватает: xaml хранится в том виде, в котором передан ( может быть без форматирования, что жутко неудобно).
Почитать про модель документов WPF: http://msdn2.microsoft.com/en-us/library/ms748388.aspx?ref=
Удачи.
Комментариев нет:
Отправить комментарий