Предложить функциональность шаблонов в приложении WPF — как это сделать?

#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>
  

И на экране редактирования вся разметка будет сериализована с ее значениями.

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