簡體   English   中英

Windows窗體中的WPF控件?

[英]WPF control in windows forms?

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

這可能嗎?

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

還有其他考慮事項嗎?

回答:

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

如果要編寫控件庫,通常最好在WPF中實現控件(因為它比WinForms強大得多),然后為其創建代理以使其易於在WinForms中使用。

代理最容易實現,如下所示:

  1. System.Windows.Forms.Control派生代理
  2. 在代理的構造函數中:實例化WPF控件,將其添加到新構造的HwndSource ,並將HwndSource添加為代理的子級
  3. 向代理添加屬性和方法,這些屬性和方法只需調用真實WPF控件的等效屬性和方法即可

或者,您可以選擇不創建代理,而只是告訴WinForms用戶,將控件添加到HwndSource時需要將其放入HwndSource中。

創建雙重用途控件時遇到的大多數其他問題都是微不足道的或瑣碎的。 例如,如果控件中具有接受圖像的功能,則只需將其設計為接受WinForms的Bitmap或WPF的BitmapSource。 如果您有一個WPF控件,該控件通常僅支持RoutedEvents,請添加老式事件處理程序,以使WinForms人群感到舒適和方便。

ElementHost允許您將WPF控件嵌入WinForms表單內, WindowsFormsHost允許您將WinForms控件插入WPF窗口中。

兩者都易於使用,並且在組成方面都存在一些小問題(您不能在WinForms元素上繪制WPF元素,等等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM