Поделиться через


Построение приложений с лентой WPF, XAML и шаблоны данных, без усилий…

Грэг Дункан

Сегодняшний WPF-проект Брайана Прендегаста (Bryan Prendergast) таков, что может вызвать отвращение к WPF, может заставить поднять брови, но дает совершенно уникальный взгляд на построение WPF-приложений. Если вы ищете, как «думать вне заданных рамок» о построении WPF-приложений…

Сайт WPF Composites

"WPF Composites делает WPF настолько простым, что даже ребенок может справиться с ним . Представь строительные кубики ... "

WPF Composites – проект, посвященный альтернативному, сжатому подходу, основанному на C#, к управлению композициями элементов пользовательского интерфейса. Обычно композиции управляются с помощью WPF Databinding и DataTemplates, но эта библиотека использует ID и координаты X-Y вместо размещения элементов на экране. Сейчас это применимо только к синхронным приложениям или приложениям, вызывающим UI Thread при работе с композициями. Эта библиотека пока еще находится на альфа-стадии и работа над ней продолжается. Однако я приветствую добровольцев! Нет XAML. Не требуются шаблоны данных!

...

BEGIN COMPOSITE... END COMPOSITE
Ниже приведен пример создания композиции путем добавления нового элемента Rectangle ( с автоматическим присвоением значений) с последующим добавлением двух текстовых блоков под прямоугольником (все в колонке 0):

1

2

3

4

5

myDockPanel.BeginComposite(myGuid)

.AddAnything<Rectangle, DockPanel(0,0)

.AddText(1,0, "Hello World 1")

.AddText(2,0, "This is text at Row 2 Column 0 in the composite")

.EndComposite(new DockArgs(Dock.Left));

Затем вся композиция добавляется к myDockPanel в Dock.Left.

Обычно объекты полученные из базы данных SQL (или сохраненные в ней) имеют идентификатор записи, ассоциированный с ними, или GUID или базисный номер подлинности (1-...). Следовательно, композиция элементов UI на экране также легко может быть ассоциирована с таким же ID, как используемый в базе данных. Однако GUID не требуется (так как может автоматически создаваться за сценой).

Этот способ может быть эффективен для связывания и получения наборов композиций элементов UI (что может соответствовать свойствам внутри класса C#). Внутри одной композиции, привязанной к ID, для идентификации положения потомка внутри Grid в родительском контейнере используются координаты X-Y.

Примеры?

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

Это простое начало выросло в ярмарку поддержки для 20 элементов управления IParent:

Примеры кода:

Grid
Dock Panel
Combo
Menu
Tree View

image[2]-109[1]

Хотите увидеть ещё?

Загляните в снимки экранов приложений на C# здесь: Demo App Screenshots

Библиотека не ограничивается C#. Примеры на IronPython можно найти здесь Iron Python Example

План оставшихся работ: To-Do List

Руководства и подробности: словари, просто как 1-2-3-4-5, селекторы

Снимки экранов приложений

Эти снимки сделаны с разрешением 1280x1024. Демонстрационные приложения должны прекрасно масштабироваться до более высоких разрешений пока они поддерживают то же самое соотношение размеров (больший выбор можно сделать в терминах плана и относительного позиционирования в готовых приложениях).

Ключевым моментом этих снимков является тщательно проработанный по стилям и цветам элемент управления; … обратите внимание, сколько кусочков требуется показать разработчику для реализации стиля с помощью подхода «код за сценой без XAML».

Иными словами, мой выбор цветов может быть ужасным, мое конструирование страниц плоским и старомодным, но это лишь подчеркивает возможности подхода, сколько элементов вы можете изменить или переделать?

На первом экране я показываю элементы Grid, TabControl, ListBox, DockPanel, TreeView, DataGrid (с Composites), GroupBox, ComboBox, Dialog и множество элементов ScrollViewers.

image[5]-53[1]

...

Новый, совершенно отличный взгляд на построение WPF-приложений, он может привлекать в мире WinForm.

О, также вы получаете все исходные коды этого подхода!

https://wpfcomposites.codeplex.com/SourceControl/BrowseLatest

image[12]-38[1]