Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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 - действительно отличный обзор темы, и в частности освещение вопроса: действительно ли мне нужен пользовательский элемент управления?
  • Форумы
    • WPF Forum
    • StackOverflow
      Вот два сообщения, в частности, которые вы хотите посмотреть (один, два).
  • MSDN
    Я согласен с Bijington, что документация MSDN отлично.

  • Блоги
    В одномиз двух сообщений StackOverflow, которые я упоминаю в разделе "Форумы" выше, я указываю на набор блогов в моем списке "must read". В частности, я хотел бы особо отметить блоги Pavan Podila и Кевин Мур. Kevin Moore был менеджером программ WPF для элементов управления WPF, и у него есть хороший набор элементов управления, называемый WPF Bag-o-Tricks, который полезны, но что более важно, элементы управления, из которых вы можете учиться.

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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