Ответ 1
(Я заранее извиняюсь за длинный пост... было так много, что я хотел передать... Надеюсь, это поможет вам.)
Это то, что мы делаем сейчас (перенос приложения Windows Forms с использованием пользовательских (GDI +) обратных элементов управления в WPF). На самом деле, моя роль в команде заключалась в создании этих элементов управления GDI +... и теперь для создания WPF.
Я согласен с Bijington в том, что сделать ваше приложение полностью 100% WPF с нуля - это путь... если вы можете убедить власти, которые должны идти по этому маршруту. Тем не менее, мы сами конвертируем наше приложение Windows Forms на месте, используя возможности WPF interop. Есть некоторые ограничения, но в целом это эффективный подход (и не такой расстраивающий, как я ожидал).
Я бы предположил, что вы берете один из ваших элементов управления GDI + и создаете один и тот же элемент управления в WPF. И затем, когда вы закончите, выбросьте его и сделайте снова. Вы всегда будете чему-то учиться во время первого усилия... и обнаружите, что есть лучший способ сделать это вместо этого. Я бы начал с чего-то маленького... пользовательская кнопка - это хорошее место для начала.
Выполнение вышеуказанного даст вам представление о том, что потребуется для всего, что вы хотите сделать.
Одна вещь, о которой я бы предупреждал вас, - это кривая обучения WPF, особенно если вы исходите из фона Windows Forms... и особенно если вы собираетесь создавать настраиваемые элементы управления. Как упомянул Абэ, это совершенно другой мир. WPF определенно приносит много энергии, но эта сила стоит того, чтобы научиться ее использовать. Абэ упоминает, как пользовательские элементы управления в WPF "беззаботны" и что их "внешний вид" может быть снабжен ControlTemplate. Это просто один из многих способов использования WPF для создания пользовательских элементов вашего пользовательского интерфейса.
Позвольте мне перечислить некоторые из следующих способов:
- Создайте существующий элемент управления, используя возможности стилей WPF.
- Воспользуйтесь моделью содержимого и/или элементами управления WPF, полученными из ContentControl. Это позволяет вам вставлять произвольно выглядящий "контент" в визуальные элементы управления (например, возможно, вставлять пользовательскую фигуру в середину кнопки).
- Составьте элемент управления из других элементов управления/элементов, воспользовавшись UserControl.
- Вывести существующий элемент управления/класс в WPF, расширить его поведение и предоставить другой набор графических изображений по умолчанию.
- Вывести из FrameworkElement, создав собственный элемент WPF, переопределив некоторые или все методы MeasureOverride, ArrangeOverride и OnRender.
- И еще... если вы можете в это поверить.
В Windows Forms это было похоже на то, что они дали вам молот (UserControl) и отвертку (Control). Однако в WPF... они предоставили вам весь набор инструментов со всеми 100 инструментами. И это часть причины большей, чем обычной кривой обучения. Тем не менее, теперь вы можете взять эту пилу, которой у вас никогда не было, и использовать ее, чтобы открутить конец 2x4 вместо использования молотка и/или отвертки, чтобы попытаться сделать то же самое.
Ресурсы
(Хорошая новость заключается в том, что у вас много ресурсов, чтобы помочь вам.)
- Книги
- Программирование WPF Chris Sells и Ian Griffiths (в частности, глава 18)
- Pro WPF от Мэтью Макдональда (в частности, глава 24)
- WPF, развязанный Адамом Нафаном (в частности, глава 16)
- Приложения = код + разметка Чарльзом Петцольдом (в частности, главы 10, 11 и 12)
- Основной WPF Криса Андерсона (в частности, глава 3)
Мои любимые книги - книга Чарльза Петцольда и книга Адама Натана. Тем не менее, глава 18 программирования WPF от Sells и Griffiths - действительно отличный обзор темы, и в частности освещение вопроса: действительно ли мне нужен пользовательский элемент управления?
- Форумы
-
MSDN
Я согласен с Bijington, что документация MSDN отлично. -
Блоги
В одномиз двух сообщений StackOverflow, которые я упоминаю в разделе "Форумы" выше, я указываю на набор блогов в моем списке "must read". В частности, я хотел бы особо отметить блоги Pavan Podila и Кевин Мур. Kevin Moore был менеджером программ WPF для элементов управления WPF, и у него есть хороший набор элементов управления, называемый WPF Bag-o-Tricks, который полезны, но что более важно, элементы управления, из которых вы можете учиться. -
Образцы, образцы и другие образцы
Там всего тонна образцов. Почти слишком много! Я бы указал на Family.Show (он был создан как сквозной образец ссылки для WPF), и я бы указал на образцы WPF SDK и, в частности, контрольные примеры настройки в этом разделе.