#c# #wpf #templates
#c# #wpf #шаблоны
Вопрос:
У меня есть мечта:
Я работаю над приложением для создания заметок, в котором каждый может хранить заметки и помечать их. Теперь было бы неплохо, если бы пользователи могли использовать приложение для нескольких целей: хранить информацию о книгах, рецепты, контрольные списки и т. Д…
Книга-информационный шаблон http://dl.danielgilbert.de/templatetable.png
Здесь у нас есть шаблон с информацией о книге. Я мог бы представить селектор шаблонов под полем заголовка, где вы могли бы выбрать шаблон для упорядоченного ввода информации. Но я застрял.
- Как бы вы на самом деле «загрузили» или «создали» такой шаблон?
- Как бы вы сохранили введенные данные?
- Как бы вы включили основные параметры форматирования в текстовых полях?
- И, наконец: мне понадобится не редактируемый шаблон для обзора, заполненный данными, которые были введены в режиме редактирования.
Я знаю, это непростой вопрос, но, возможно, есть несколько довольно хороших идей. 🙂
Комментарии:
1. Знаете ли вы «юниверс» шаблонов заранее или пользователю должно быть разрешено создавать новые шаблоны?
2. Вам нужен один шаблон для каждого объекта (книга, заметка, …) или много? И могут ли пользователи создавать новые объекты?
3. Я думаю
ContentControl.ContentTemplate
,ContentControl.Content
,DataTemplate.DataType
и MVVM предоставят вам именно то, что вы ищете. japf.fr/2009/03 /…4. @MartinLiversage Нет, пользователь должен иметь возможность создавать новые шаблоны. И спасибо за встраивание изображения. 🙂
5. @Ivan. Бенко Нет, мне нужен один шаблон для каждой сущности. И я все еще ищу разумное решение для сохранения всего.
Ответ №1:
Вы можете использовать отражение и пользовательские атрибуты.
Я реализую аналогичную функциональность в своем приложении wp7 (но это не имеет значения, xaml — это везде xaml).
Идея состоит в том, чтобы создать супер-представление (элемент управления), который может отображать любую сущность. Создайте для каждого класса сущностей, представляющего эту сущность, и добавьте пользовательские атрибуты к свойствам этого класса (которые сообщают super view, как отображать сущность) Super view должен проанализировать эти атрибуты и создать view.
Это часть моего проекта:
Я надеюсь, что эта информация поможет вам.
Комментарии:
1. Хорошо, итак, вы должны создать представление, которое автоматически использует объект. Это довольно хорошая идея! 🙂 Однако обычному пользователю было бы сложно создать свой «собственный» шаблон. Может быть, мне следует загрузить XAML-Template во время выполнения через XamlReader и — когда пользователь сохранит его — сериализовать весь шаблон, включая его значения.
2. @DanielGilbert, в моем проекте я использую это для редактирования простых объектов, не создавая для этого много страниц xaml (например, пользовательских настроек). Это только идея для вас, а не решение..
3. Неважно, как я уже сказал, это довольно приятно и умно. Действительно. 😉 Но я думаю, это было бы слишком сложно для среднего конечного пользователя. Я проведу еще немного мозгового штурма…
Ответ №2:
ОК,
очевидно, что добиться того, чего я хочу, довольно просто: если вы вводите что-либо в элемент управления, оно будет сериализовано, если вы используете XamlWriter. Я мог бы сохранить сериализованный Xaml и прочитать его при загрузке заметки. Итак, наконец, пользователь получит файл, в котором он вводит некоторую разметку, например:
<CheckBox >test</CheckBox>
<Label>Huhu</Label>
<TextBox Foreground="Gray">This is a test...</TextBox>
<Label>Huhu</Label>
<TextBox Foreground="Gray">This is a test...</TextBox>
И на экране редактирования вся разметка будет сериализована с ее значениями.
Однако у этого есть недостаток, заключающийся в том, что вы не можете изменить шаблон после его назначения, или вы не можете изменить макет, если изменится базовый шаблон. Может быть, я получу представление о том, как этого добиться.