У меня есть еще одно предложение для вас - реальный вопрос был:
«Я хотел бы, чтобы позволить простой макет экрана, чтобы быть отредактирован в run- время, редактируя XAML. Кто-нибудь знает, возможно ли это? "
Ответ, безусловно, «ДА»! И есть много способов добиться этого, сделав несколько предположений, конечно.
Если вам не нужно обрабатывать события или писать собственные преобразователи значений (или что-либо еще, что обычно входит в код позади) в «динамической» части вашего XAML, то вы можете просто использовать класс XamlReader для синтаксического анализа файл XAML или строку, содержащую XAML. Поскольку вы просто редактируете макет, я ожидаю, что это предположение верно.
Итак, вот что я хотел бы сделать:
1) Запишите все пользовательские элементы управления, модели данных, преобразователи значений, и т.д., и вставить их в сборке.
2) Загрузите эту сборку либо с помощью приложения, либо загрузите ее динамически - обе будут работать.
3) Создайте строку/файл/ресурс (возьмите ваш выбор), у которого есть ваш XAML, который выполняет макет, в комплекте с отображением вашего пространства имен .NET в пространство имен XML. Убедитесь, что у корневого элемента нет атрибута «x: Class», поскольку у вас нет кода за файлом! Строка будет использовать стандартные элементы управления WPF (например, StackPanel) для компоновки ваших пользовательских элементов управления. (Конечно, вы также можете написать собственные элементы управления компоновкой).
4) Разрешить пользователю редактировать эту строку. Когда они отредактировали его, используйте XamlReader для анализа файла, а затем отобразите полученный UIElement в своем окне.
BINGO!
Одна проблема - каждый раз, когда XAML изменяется, графический интерфейс перемещается и создается новый. Если ваш графический интерфейс является обоснованным (даже если текущая позиция каретки важна), пользователь будет очень раздражаться. Это зависит от того, что вы намерены использовать - это не может быть проблемой.
Я ожидаю, что с некоторой дополнительной работой вы можете написать MarkupExtension, который используется для обозначения частей, которые вы пытаетесь выполнить. Таким образом, они могут использоваться повторно при изменении макета.
Я надеюсь, что это ясно. Если нет, сообщите мне, и я могу расширить концепцию - это сделает приятную запись в блоге.
FWIW, я смог открыть его с помощью FF3. У меня установлен .NET 3.5SP1, если это имеет значение. – Andy 2008-12-01 17:23:53
Но это не отвечает на вопрос. OP конкретно заявила, что это приложение WPF, поэтому способность XAML, отображаемая в веб-браузере, совершенно не относится к делу. – GalacticCowboy 2008-12-01 18:54:31
Я использовал «веб-браузер», чтобы объяснить больше характеристик концепции LooseXAML. – 2008-12-02 22:38:45