C # переход между GDI + и WPF - PullRequest
       26

C # переход между GDI + и WPF

23 голосов
/ 07 ноября 2008

Я , учитывая переноса моего приложения c # с использования пользовательских нарисованных элементов управления GDI + в приложение WPF с настраиваемыми элементами управления и т. Д. Я хотел бы знать, что к этому относится и чего ожидать.

Есть ли какие-нибудь ресурсы, которые люди могут порекомендовать, которые могли бы помочь? Или действительно какие-либо личные переживания, которые могут быть полезны?

Ответы [ 3 ]

35 голосов
/ 08 ноября 2008

(заранее извиняюсь за длинный пост ... я так много хотел передать ... надеюсь, это поможет вам.)

Это то, что мы делаем сейчас (перенос приложения Windows Forms с интенсивным использованием пользовательских (GDI +) отрисованных элементов управления в WPF). Фактически, моя роль в команде заключалась в создании этих элементов управления GDI + ... и теперь в создании WPF.

Я согласен с Bijington, что создание приложения полностью на 100% WPF с нуля - это путь ... если вы можете убедить силы в этом пути. Однако мы сами конвертируем наше приложение Windows Forms на месте, используя возможности WPF interop . Есть некоторые ограничения, но в целом это был эффективный подход (и не такой разочаровывающий, как я ожидал).

Я хотел бы предложить, чтобы вы взяли один из ваших элементов управления GDI + и создали тот же элемент управления в WPF. А затем, когда вы закончите, выбросьте его и сделайте это снова. Вы неизменно узнаете что-то во время первой попытки ... и обнаружите, что есть лучший способ сделать это вместо этого. Я бы начал с чего-то маленького ... хорошая кнопка - хорошее место для начала.

Выполнение вышеизложенного даст вам представление о том, что потребуется для всего остального, что вы хотите сделать.

Одна вещь, о которой я хотел бы предупредить вас, это кривая обучения WPF, особенно если вы работаете с Windows Forms ... и особенно если вы собираетесь создавать пользовательские элементы управления. Как уже упоминал Эйб, это совершенно другой мир. WPF определенно несет в себе много возможностей, но эта сила зависит от того, как его использовать. Абэ упоминает, что пользовательские элементы управления в WPF выглядят «безликими» и что их «внешний вид» может быть предоставлен с помощью шаблона ControlTemplate. Это только один из многих способов в WPF предоставить настраиваемые элементы вашего пользовательского интерфейса.

Позвольте мне перечислить некоторые из этих дополнительных способов:

  1. Разработайте стиль существующего элемента управления, используя возможности стилевого оформления WPF.
  2. Воспользуйтесь преимуществами модели содержимого WPF и / или элементов управления, полученных из ContentControl. Это позволяет вам прикреплять произвольно выглядящий «контент» к визуальным элементам управления (например, может вставлять произвольную нарисованную фигуру в середину кнопки).
  3. Составьте элемент управления из других элементов управления / элементов, используя преимущества UserControl.
  4. Извлечение из существующего элемента управления / класса в WPF, расширение его поведения и предоставление другого набора визуалов по умолчанию.
  5. Производите от FrameworkElement, создавая пользовательский элемент WPF, переопределяя некоторые или все методы MeasureOverride, ArrangeOverride и OnRender.
  6. И еще .... если вы можете в это поверить.

В Windows Forms было похоже, что они дали вам молоток (UserControl) и отвертку (Control). Тем не менее, в WPF ... они дали вам полный набор инструментов со всеми 100 инструментами. И это одна из причин большей кривой обучения, чем обычно. Однако теперь вы можете взять то, что у вас никогда не было раньше, и использовать его, чтобы отпилить конец 2x4, вместо того, чтобы использовать молоток и / или отвертку, чтобы попробовать сделать то же самое.

Ресурсы

(Хорошей новостью является то, что есть много ресурсов, чтобы помочь вам.)

  1. Книги
    • Программирование WPF Крисом Селлсом и Ианом Гриффитсом (в частности, глава 18)
    • Pro WPF от Мэтью Макдональда (в частности, глава 24)
    • WPF, выпущенный Адамом Натаном (в частности, глава 16)
    • Приложения = код + разметка Чарльза Петцольда (в частности, главы 10, 11 и 12)
    • Essential WPF Криса Андерсона (в частности, глава 3)

      Мои любимые книги - книга Чарльза Петцольда и книга Адама Натана. Тем не менее, глава 18 «Программирование WPF» от Sells & Griffiths - это действительно хороший обзор предмета и, в частности, охват вопроса: действительно ли мне нужен пользовательский элемент управления?
  2. Форум
    • Форум WPF
    • StackOverflow
      Вот, в частности, два сообщения, на которые вы захотите взглянуть ( one , two ).
  3. * 1081 MSDN *
    Я согласен с Bijington, что документация MSDN отлично.

  4. Блоги
    В одной из двух публикаций StackOverflow, на которые я ссылаюсь в разделе «Форумы» выше, я указываю на набор блогов в моем списке «обязательно для чтения». В частности, я бы особо отметил блоги Павана Подила и Кевина Мура . Кевин Мур был менеджером программ WPF для элементов управления WPF, и у него есть хороший набор элементов управления, называемый WPF Bag-o-Tricks , которые являются полезными, но, что более важно, элементами управления, из которых вы можете научиться.

  5. Образцы, образцы и другие образцы
    Там есть только тонна образцов. Почти слишком много! Я бы указал на Family.Show (он был создан как сквозной эталонный образец для WPF), и я бы указал на WPF SDK образцы и, в частности, на Образцы настроек управления в этом разделе.

3 голосов
/ 07 ноября 2008

Существует изменение парадигмы в том, как вы разрабатываете элементы управления для WPF. Вместо того, чтобы определять все поведение и искать элемент управления, вы определяете только предполагаемое поведение.

Это самый сложный аспект перехода на WPF. Ваш класс элемента управления определяет контракт поведения и предоставляет свойства, которые будут использоваться для визуализации, а ControlTemplate используется для определения того, как выглядит элемент управления.

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

2 голосов
/ 07 ноября 2008

На самом деле это проект, над которым я сейчас работаю, хотя мне посчастливилось начать все заново. Если вы можете сделать это, я настоятельно рекомендую это, сохраняя основные функциональные возможности старой системы / элементов управления, но начнем заново. Всегда приятно начинать с базы и знать, где что-то пошло не так, как надо.

Лично я нашел веб-сайт msdn чрезвычайно полезным, если не стека, то поток очень хороший источник знаний. Я был бы рад дать указатели, если вам нужно.

Также, если у вас есть какие-либо вопросы по поводу привязки данных, это то место, куда можно обратиться: bea costa она покрыла большинство вещей там.

На дополнительном замечании мы испытали огромное улучшение производительности при использовании wpf по сравнению с GDI.

...