создание пользовательского интерфейса в WPF - PullRequest
2 голосов
/ 12 мая 2010

У меня есть база данных SQL, содержащая ряд числовых и текстовых значений, которые регулярно обновляются. Точное число / тип / имена этих точек данных могут меняться в зависимости от источника записи в базу данных.

Я хотел бы создать редактор пользовательского интерфейса, в котором пользователь может добавлять точки базы данных в пользовательский интерфейс, упорядочивать их и форматировать по своему усмотрению. Если новая точка добавлена ​​в базу данных, они могут щелкнуть правой кнопкой мыши на интерфейсе пользователя, сказать «добавить эту точку» и выбрать из списка точек базы данных.

Я ищу несколько указателей о том, с чего начать создание этого приложения-редактора. Может ли быть что-то умное с использованием XAML для динамического создания элементов управления WPF std во время выполнения?


Дуга,

Извинения, под точками базы данных я просто подразумеваю строки в базе данных, которые представляют элемент для отображения в пользовательском интерфейсе.


Луч / Сушант,

Спасибо, что нашли время ответить, я попробую оба эти подхода.

Si

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Вот простой способ сделать это:

  1. Создание класса DataPoint, включая поля «Имя», «Тип» и «Значение»
  2. Создайте DataPointView UserControl, который предоставляет свойство Name и свойство DataPoint только для чтения. Когда свойство Name установлено, загрузите DataPoint из базы данных. При желании можно использовать таймер для периодической перезагрузки DataPoint (или подписаться на обновления уведомлений из вашей базы данных).
  3. Создание класса UIEditor, производного от Window, который предоставляет свойство CurrentForm, которое изначально является пустым Canvas
  4. Добавление обработчиков для ApplicationCommands.Open, ApplicationCommands.Save и т. Д. Для использования XamlParser и XamlWriter для загрузки / сохранения макета из / в файл на диске (или в базу данных)
  5. В XAML вашего UIEditor включите ContentPresenter, связанный со свойством CurrentForm, чтобы хранить редактируемый пользовательский интерфейс. Также любые другие необходимые элементы управления (кнопка Сохранить, кнопка Открыть, палитра и т. Д.).
  6. В XAML вашего DataPointView отобразите имя и значение точки данных.
  7. В вашем классе UIEditor подписывайтесь на события предварительного просмотра мыши OnPreviewLeftButtonDown и т. Д. Всякий раз, когда событие перемещения мыши следует за событием мыши в DataPointView, захватывайте мышь и начинайте регулировать координаты DataPointView влево и вверх - это позволяет пользователю перетаскивать DataPointView вокруг холста.
  8. В XAML вашего DataPointView включите ContextMenu, у которого ItemsSource связан с "{Binding AvailablePoints, RelativeSource = {RelativeSource FindAncestor, my: UIEditor, 1}}", и убедитесь, что свойство AvailablePoints вашего класса UIEditor возвращает список Элементы меню с именами доступных точек данных и соответствующей командой параметр команды.
  9. В обработчике для команды, связанной в контекстном меню, добавьте новый DataPointView к вашему холсту CurrentForm и задайте его Имя из имени, указанного в CommandParameter
  10. Установите Focusable = true для объектов DataPointView и обработайте ApplicationCommands.Delete путем удаления сфокусированного DataPointView.

С этим кодом написано:

  • Вы можете разрешить пользователям редактировать ваш пользовательский интерфейс, открыв окно UIEditor.
  • Вы можете отобразить ваш интерфейс без функций редактирования, просто загрузив его с диска с помощью Application.LoadComponent и отобразив его в окне.
0 голосов
/ 12 мая 2010

используйте WPF DataGrid, доступный как WPF ToolKit в .NET 3.5, или он является стандартным для .NET 4.0. Он имеет следующие особенности:

  1. Настраиваемые столбцы данных
  2. Используйте редактируемые строки, которые можно сохранить
  3. Колонки могут быть добавлены / удалены / переставлены на лету.
  4. Может напрямую загружать имена столбцов из базы данных

и многое другое.

Я думаю, это было бы идеально.

Пожалуйста, отметьте ответ, если он кажется полезным. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...