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

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

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


person TK.    schedule 07.11.2008    source источник
comment
Мне было бы любопытно узнать, решите ли вы сделать скачок в WPF ... и почему или почему нет. А если вы это сделаете, то каков ваш опыт после того, как вы немного проделали это. Было бы здорово, если бы вы отправили сюда это ... просто с идеей.   -  person cplotts    schedule 12.11.2008


Ответы (3)


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

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

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

Я бы посоветовал вам взять один из ваших элементов управления 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 инструментами. И это одна из причин более сложной, чем обычно, кривой обучения. Однако теперь вы можете взять пилу, которой у вас никогда раньше не было, и использовать ее, чтобы отпилить конец 2х4 вместо того, чтобы использовать молоток и / или отвертку, чтобы попытаться сделать то же самое.

Ресурсы

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

  1. Books
    • Programming WPF by Chris Sells & Ian Griffiths (in particular, chapter 18)
    • Pro WPF от Мэтью Макдональда (в частности, глава 24)
    • WPF Unleashed by Adam Nathan (в частности, глава 16)
    • Приложения = Код + Разметка Чарльза Петцольда (в частности, главы 10, 11 и 12)
    • Essential WPF Криса Андерсона (в частности, глава 3)

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

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

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

person cplotts    schedule 08.11.2008
comment
Хороший ответ. Много деталей. Я собираюсь приступить к аналогичному проекту, так что это очень полезно. +1 график. - person serg10; 12.11.2008
comment
Спасибо, я ценю комплимент. Я почувствовал боль от смены мышления Windows Forms на WPF ... и хочу помочь другим избежать этого в максимально возможной степени. - person cplotts; 12.11.2008
comment
And then, when you are finished, throw it away and do it again - Раньше я делал это очень давно на Basic, но определенно не сейчас ... Я предлагаю вам не выбрасывать это; C # + VS чрезвычайно удобны для очистки. Вместо этого очистите это. По моему опыту, это занимает гораздо меньше времени. - person Roman Starkov; 08.01.2012

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

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

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

person Abe Heidebrecht    schedule 07.11.2008

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

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

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

Следует отметить, что при использовании wpf вместо GDI производительность значительно улучшилась.

person Bijington    schedule 07.11.2008
comment
Спасибо за ответ. Одна из причин, по которой я рассматриваю это, заключается в том, чтобы посмотреть на потенциальное увеличение производительности. В настоящее время у меня нет абсолютно никакого опыта работы с WPF, поэтому меня это немного беспокоит. Есть ли какие-нибудь хорошие «руководства для начинающих», которые вы могли бы порекомендовать? - person TK.; 08.11.2008
comment
Система композиции сохраненных режимов в WPF действительно дает некоторые убедительные преимущества в производительности ... в большинстве ситуаций. - person cplotts; 08.11.2008