wpf приложение может быть развернуто, не компилируя xaml?

Чтобы изменить высоту текстовой области, просто измените разметку.

<textarea rows="12">

</textarea>

Добавление большего количества строк приведет к увеличению текстовой области.

Вы можете использовать столбцы для изменения ширины

<textarea cols="100">

</textarea>
7
задан YeahStu 4 December 2008 в 18:34
поделиться

6 ответов

У меня есть другое предложение для Вас - реальный вопрос был:

"Я хотел бы позволить простому макету экрана быть отредактированным во времени выполнения путем редактирования XAML. Кто-либо знает, возможно ли это?"

Ответ определенно, "ДА"! И существует много способов достигнуть этого, делая несколько предположений, конечно.

Если бы у Вас нет потребности обработать события или записать пользовательские преобразователи значения (или что-либо еще, что обычно входило бы в код позади) в "динамической" части Вашего XAML, то можно просто использовать класс XamlReader для парсинга файла XAML или строки, содержащей XAML. Так как Вы просто редактируете расположение, я ожидаю, что они предположение сохраняются.

Так, вот то, что я сделал бы:

1) Запишите все свои пользовательские элементы управления, модели данных, оцените преобразователи, и т.д., и засуньте их в блок.

2) Загрузка, что блок, или при наличии Вашего приложения ссылаются на него или загружают его динамично - оба будут работать.

3) Создайте строку/файл/ресурс (выбирают), который имеет Ваш XAML, который делает расположение, вместе с отображением Вашего пространства имен.NET к пространству имен XML. Удостоверьтесь, что у Вас нет атрибута "x:Class" на корневом элементе, поскольку у Вас нет кода позади файла! Строка использовала бы стандартные средства управления WPF (как StackPanel) к расположению Ваши пользовательские элементы управления. (Конечно, можно также записать средства управления пользовательским макетом).

4) Позвольте пользователю редактировать эту строку. Когда они отредактируют его, используйте XamlReader, чтобы проанализировать файл и затем отобразить получающийся UIElement в Вашем окне.

БИНГО!

Одна проблема - каждый раз XAML изменяется, GUI брошен, и создается новый. Если Ваш GUI будет sateful (даже если текущая позиция курсора будет важна), то пользователь будет раздражаться довольно быстро. Это зависит от того, что Ваш предназначать использование - это не может быть проблемой.

Я ожидаю, что еще с некоторой работой, Вы могли записать MarkupExtension, который используется для обращения к частям, которые Вы пробуете к расположению. Таким образом, они могли быть снова использованы когда изменения макета.

Я надеюсь, что это ясно. В противном случае сообщите мне, и я могу подробно остановиться на понятии - оно сделало бы хорошую запись в блоге.

7
ответ дан 6 December 2019 в 07:53
поделиться

Спасибо unthinkableMayhem для ссылки.

Проблема со свободным XAML состоит в том, что XamlReader при вызове во времени выполнения не может события сцепления к функциям в блоках, и при этом нет механизма для динамичной загрузки блоков. Путем обработчики для направленных событий указаны в XAML, один из самых больших недостатков дизайна WPF/XAML и делает свободный XAML рядом с бесполезным.

Работа, которую я сделал во встраивании сценариев Динамического времени выполнения языка (DLR) в XAML, полезна и для свободного и для скомпилированного XAML. Мое намерение состояло в том, чтобы сделать свободный XAML гражданином первого класса в WPF путем разрешения направленных событий, команд, преобразователей значения и других понятий XAML/WPF, доступных в свободном XAML. Я чувствую, что это было достигнуто (хотя мои блоги не упоминают динамично, что загрузили блоки, но это является прямым).

Если Вы сохраняетесь, возможно развернуть приложение Windows WPF таким способом, которым xaml файлами можно управлять во времени выполнения. Heck, можно динамично генерировать XAML со встроенными сценариями - никакая требовавшая сборка. Человек, это - одна из самых забавных вещей, которые я говорил в течение долгого времени.

Предупредите, хотя - "X" в XAML только маркетинговый термин. Это не расширяемо с технической точки зрения, поэтому ожидайте мир боли при выходе из пути, изложенного Microsoft. Я буду рад помочь, если Вы пойдете этим путем - контактная информация на моем веб-сайте (www.thinkbottomup.com.au).

Удачи,

Dan

7
ответ дан 6 December 2019 в 07:53
поделиться

Не легко. Приложение WPF имеет, это - XAML, переведенный в .g.cs и .baml компилятором, и впоследствии компилируется в двоичный файл.

Конечно, возможно создать компилятор XAML во время выполнения. Это не было бы легкой задачей и действительно потребует некоторых взглядов о том, почему не только делают это как веб-сайт!

5
ответ дан 6 December 2019 в 07:53
поделиться

Это сообщение в блоге: http://www.thinkbottomup.com.au/site/blog/Embedding_DLR_Scripts_in_XAML_Part_6 имеет некоторую информацию о загрузке XAML во времени выполнения, а также другом забавном материале.

2
ответ дан 6 December 2019 в 07:53
поделиться

XAMLPad и XAML Cruncher оба делают это, таким образом, это должно быть возможно.

XAML Cruncher исходный код доступен только в книге Charles Petzold по WPF:

http://www.charlespetzold.com/wpf/

Похож это использует XamlReader для парсинга XAML.

0
ответ дан 6 December 2019 в 07:53
поделиться

Можно загрузить XAML в приложение во времени выполнения как рев.

UIElement documentRoot = (UIElement)System.Windows.Markup.XamlReader.Load(xmlReader);

Существует понятие "свободного XAML'. Свободный XAML является в основном возможностью, которая позволяет Вам открывать любой файл XAML на своем жестком диске (или гиперссылка на веб-странице) и "выполнять" его в браузере без компиляции.

Проверьте эту демонстрационную свободную страницу XAML, которая имеет ряд Кнопок и шаблонов пользовательского элемента управления, которые я реализовал, http://wpf.ria-labs.com/ux.xaml в этом блоге, который Это просто открывает в IE. Можно загрузить XAML в приложение WPF и приблизительно использоваться.

0
ответ дан 6 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: