(заранее извиняюсь за длинный пост ... я так много хотел передать ... надеюсь, это поможет вам.)
Это то, что мы делаем сейчас (перенос приложения 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 Крисом Селлсом и Ианом Гриффитсом (в частности, глава 18)
- Pro WPF от Мэтью Макдональда (в частности, глава 24)
- WPF, выпущенный Адамом Натаном (в частности, глава 16)
- Приложения = код + разметка Чарльза Петцольда (в частности, главы 10, 11 и 12)
- Essential WPF Криса Андерсона (в частности, глава 3)
Мои любимые книги - книга Чарльза Петцольда и книга Адама Натана. Тем не менее, глава 18 «Программирование WPF» от Sells & Griffiths - это действительно хороший обзор предмета и, в частности, охват вопроса: действительно ли мне нужен пользовательский элемент управления?
- Форум
- Форум WPF
- StackOverflow
Вот, в частности, два сообщения, на которые вы захотите взглянуть ( one , two ).
* 1081 MSDN *
Я согласен с Bijington, что документация MSDN отлично.
Блоги
В одной из двух публикаций StackOverflow, на которые я ссылаюсь в разделе «Форумы» выше, я указываю на набор блогов в моем списке «обязательно для чтения». В частности, я бы особо отметил блоги Павана Подила и Кевина Мура . Кевин Мур был менеджером программ WPF для элементов управления WPF, и у него есть хороший набор элементов управления, называемый WPF Bag-o-Tricks , которые являются полезными, но, что более важно, элементами управления, из которых вы можете научиться.
Образцы, образцы и другие образцы
Там есть только тонна образцов. Почти слишком много! Я бы указал на Family.Show (он был создан как сквозной эталонный образец для WPF), и я бы указал на WPF SDK образцы и, в частности, на Образцы настроек управления в этом разделе.