WPF control в windows формах? - PullRequest
       21

WPF control в windows формах?

1 голос
/ 19 ноября 2009

Я хотел бы создать несколько пользовательских элементов управления пользовательского интерфейса, которые работают как с WPF, так и с Windows Forms.

Возможно ли это?

Если да, могу ли я создать эти элементы управления в WPF или мне не нужно использовать элемент управления Windows Forms?

Есть ли другие соображения?

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

Ответы:

  1. Да, это возможно.
  2. Да, вы можете создавать их в WPF.
  3. Основное соображение заключается в том, что при использовании элемента управления WPF из WinForms его необходимо заключить в HwndSource.

Если вы пишете библиотеку элементов управления, обычно лучше реализовать свой элемент управления в WPF (поскольку он намного мощнее, чем WinForms), а затем создать для него прокси-сервер, чтобы его можно было легко использовать в WinForms.

Прокси проще всего реализовать следующим образом:

  1. Извлечь прокси из System.Windows.Forms.Control
  2. В конструкторе прокси: создайте экземпляр своего элемента управления WPF, добавьте его к недавно созданному HwndSource и добавьте HwndSource в качестве дочернего элемента прокси
  3. Добавление свойств и методов в прокси, которые просто вызывают эквивалентные свойства и методы реального элемента управления WPF

В качестве альтернативы вы можете отказаться от создания прокси-сервера, а вместо этого просто сказать своим пользователям WinForms, что им нужно поместить ваш элемент управления в HwndSource, когда они добавят его в свою форму.

Большинство других проблем, с которыми вы столкнетесь при создании элемента управления двойного назначения, несущественно или тривиально исправить. Например, если в вашем элементе управления есть функция, которая принимает изображения, просто спроектируйте ее так, чтобы она принимала либо Bitmap WinForms, либо BitmapSource WPF. И если у вас есть элемент управления WPF, который обычно поддерживает только RoutedEvents, добавьте старомодные обработчики событий для удобства и удобства толпы WinForms.

1 голос
/ 19 ноября 2009

ElementHost позволит вам встроить элемент управления WPF в форму WinForms, WindowsFormsHost позволит вам вставить элементы управления WinForms в окно WPF.

Оба просты в использовании, и оба имеют незначительные проблемы с композицией (вы не можете нарисовать элемент WPF поверх элемента WinForms и т. Д.).

...