2009-11-18 507 views
1

我想創建一些自定義UI控件,可以同時使用WPF和Windows窗體。Windows窗體中的WPF控件?

這可能嗎?

如果是這樣,我可以在WPF中創建這些控件嗎?還是我需要使用Windows窗體控件?

有沒有其他的考慮?

回答

2

答案:

  1. 是的,這是可能的。
  2. 是的,你可以在WPF中創建它們。
  3. 主要考慮因素是使用WinForms中的WPF控件時,需要將其封裝在HwndSource中。

如果您正在編寫控件庫,通常最好是在WPF中實現您的控件(因爲它比WinForms強大得多),然後爲它創建一個代理以使其易於使用在WinForms中。

  1. 派生從System.Windows.Forms.Control
  2. 代理在代理的構造函數:實例化你的WPF控件,將其添加到新建HwndSource,並添加HwndSource作爲

    如下代理是最容易實施代理的子代

  3. 將屬性和方法添加到代理中,該代理只調用真正的WPF控件的等效屬性和方法

或者,您可以選擇不創建代理,而只需告訴您的WinForms用戶,他們需要將您的控件放入HwndSource中,然後將它們添加到其窗體中。

您在創建雙重用途控件時遇到的大多數其他問題對於修復而言都是微不足道的或微不足道的。例如,如果您的控件中有一個接受圖像的功能,只需將其設計爲接受WinForms的位圖或WPF的BitmapSource。如果您有一個通常只支持RoutedEvents的WPF控件,請爲WinForms人羣的舒適性和便利性添加老式的事件處理程序。

1

ElementHost將允許您在WinForms表單中嵌入WPF控件,WindowsFormsHost讓我們將WinForms控件插入到WPF窗口中。

兩者都易於使用,並且都有組成方面的小問題(您不能通過WinForms元素等繪製WPF元素)。

相關問題