1. 程式人生 > >WPF視窗中使用WinForm控制元件的一些限制

WPF視窗中使用WinForm控制元件的一些限制


在wpf中使用WinForm的控制元件有時候倒是很方便,特別是要使用ActiveX控制元件的時候必須把它封裝成WinForm的控制元件才能使用,但使用的時候有諸多限制。這兩天想在WPF視窗中使用一下WinForm的WebBrowser控制元件,但是一設定AllowsTransparency="True"屬性,那個WebBrowser控制元件影都沒有了,辛苦了兩天去找原因,找方法,恍然間看到下面這段話。

抄一段《Programming Windows Presentation Foundation》上面的話,

WindowsFormsHost cannot be rotated, scaled, or skewed by a transform.

WindowsFormsHost supports only Opacity = 100% and can be contained only within other elements that are Opacity = 100%.

WindowsFormsHost will appear on top of other WPF elements in the same top-level window, although menus, ToolTips, and combo-box drop-downs are separate top-level windows and should work fine with WindowsFormsHost.

WindowsFormsHost does not respect the clipping region of its parent UIElement.

While the mouse is over the WindowsFormsHost, you won't receive WPF mouse events, and WPF's IsMouseOver property will return false.

While the WindowsFormsHost has keyboard focus, you won't receive WPF keyboard events and WPF's IsFocusWithin property will return false.

When focus is within the WindowsFormsHost and changes to another control inside the WindowsFormsHost, you won't receive WPF GotFocus/LostFocus events.

wpf中的frame控制元件也是如此,frame能顯示HTML和XAML檔案,如果是HTML檔案,那麼主視窗就不能AllowsTransParency="True",frame也不能RotateTransform

還有些其他無用功的地方

比如說由於設定了WindowStyle="None"屬性,就不能直接移動視窗。我還花了半天去寫視窗的滑鼠訊息處理函式,後來突然發現Window類中有個DragMove()函式,還挺好用,真是命苦呀。

WPF中有自己的定時器類DispatcherTimer,如果用成原來的那個定時器類,苦也。丟擲個異常The   calling   thread   cannot   access   this   object   because   a   different   thread   owns   it.   半天又沒了。 

相關推薦

wpf XMAL隱藏控制元件

首先,需要解決怎樣在Click事件後設置Visibility屬性?WPF中的EventSetter只能連線事件和事件處理的方法。而EventTrigger則只能定義TriggerAction,而不能新

C#Winform控制元件扁平化設計

導語:在用Visual Studio進行WinForm窗體程式設計時,系統提供的窗體和其他公共控制元件看起來比較難看,隨著設計風格以及人們審美的轉變,使用者更喜歡如下圖所示扁平化設計風格。可以通過兩種方

WPF視窗使用WinForm控制元件一些限制

在wpf中使用WinForm的控制元件有時候倒是很方便,特別是要使用ActiveX控制元件的時候必須把它封裝成WinForm的控制元件才能使用,但使用的時候有諸多限制。這兩天想在WPF視窗中使用一下WinForm的WebBrowser控制元件,但是一設定AllowsTrans

winform實現的類似於WPFPopUp控制元件的一段程式碼

用winform實現的類似於WPF中PopUp控制元件的一段程式碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using Syste

WPF使用winform控制元件WebBrowser

為了使用Winform控制元件中的WebBrowser,而WPF窗體不能直接執行WinForm控制元件,然後在WPF窗體上新增WindowsFormsHost控制元件,此WindowsFormsHost控制元件可作為Win From控制元件執行的容器。 1、首先,我們需要向

Winform控制元件WPF使用的注意事項

從Winform轉到WPF的時候,經常需要在WPF裡面採用一些以前用Winform寫過的控制元件。下面介紹在WPF中使用Winform的方法和注意事項。 1、在WPF中使用Winform的控制元件 (1)新增必須的dll。主要有:WindowsFormsIntegration.dll,Sys

C#下WPF呼叫WinForm控制元件

最近在C#下呼叫NPlot生成股票K線圖,由於用的WPF框架,而NPlot是基於WinForm開發的。所以不能直接引用。具體做法如下:   NPlot原始碼Microsoft .NET Framewo

WPF新增WINFORM控制元件的方法

在wpf程式中新增window的程式集引用:System.Windows.Forms.dll和WindowsFormsIntegration.dll xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;as

WPF嵌入winform控制元件

   最近想整理一下WPF中嵌入winform控制元件的相關內容。我認為可分幾步走:   第一步:在專案中新增System.Windows.Forms 和 WindowsFormsIntegration這兩個dll的引用。   第二步:在xaml檔案中新增System.Wi

WPF使用WinForm控制元件方法

下面以在Wpf中新增ZedGraph(用於建立任意資料的二維線型、條型、餅型圖表的一個開源類庫)控制元件,說明在WPF中使用Winform控制元件的方法。 1、首先新增對如下兩個dll檔案的引用:WindowsFormsIntegration.dll,System.Windo

WPF使用Winform控制元件

在專案中遇到使用WPF做上位機,引用Winform控制元件,特此做一下總結: 1、在設計介面新增: xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:wfi

WPF動態載入XAML控制元件

原文: WPF中動態載入XAML中的控制元件 using System; using System.Collections.Generic; using System.Linq; using System.Text;

WindowsXamlHost:在 WPF 使用 UWP 控制元件控制元件

原文 WindowsXamlHost:在 WPF 中使用 UWP 控制元件庫中的控制元件 在 WindowsXamlHost:在 WPF 中使用 UWP 的控制元件(Windows Community Toolkit) 一文中,我們說到了在 WPF 中引入簡單的 UWP 控制元件以及相關

C# winform 自定義函式找不到Form控制元件和定義的全域性變數

今天碰到一個比較狗血的問題,想了很多辦法,最後發現,原來如此的坑。 在新建一個form頁面後,我們在程式碼頁面寫程式碼,往往會寫自定義的方法,一般情況下,在自定義的方法中是可以找到form頁面中的控制元件和自定義的全域性變數, 但是如果我們在自定義的方法前面加了static,那麼坑就出來啦,從此這個方法好

WPF 獲得DataTemplate控制元件

1、WPF 獲得DataTemplate中的控制元件, 下面這個示例是從ListBox中獲得ListBoxItem模板的控制元件資訊。 前臺程式碼: <!--獲得模板中的控制元件-->      &nbs

基於C#的WinFormDataGridView控制元件操作彙總

基於C#的WinForm中DataGridView控制元件操作彙總 一、單元格內容的操作  *****// 取得當前單元格內容         Console.WriteLine(DataGridView1.CurrentCell.Value); // 取

wpf DataGrid 控制元件的樣式設定及使用

本次要實現的效果為: 這個DataGrid需要繫結一個集合物件,所以要先定義一個Experience類,包含三個欄位 /// <summary> /// 定義工作經歷類 /// </summary> p

QTabWidget放置控制元件控制元件無法填充滿整個tabWidget視窗(有白邊)問題解決方法

   解決方法:給需要向tabWidget中新增的控制元件套一層佈局 (QHBoxLayout等),注意建立的這個佈局物件後要使用setContentsMargins(0,0,0,0)設定佈局邊界與承載這個佈局的窗體的邊界之間的間隙為零 (這個是決解這個問題的關鍵),佈局邊界

WPF重疊控制元件的滑鼠穿透點選

Problem:有控制元件A和控制元件B,位置完全重疊,B覆蓋在A上方。換句話說,B只是A的修飾(實現中經常有可能會碰到這樣的情況,比如B可能是一個png圖片,你又不想重寫A的模板),我們需要在滑鼠操作時透過B直接點選到A。 Solution:你可能會想讓B的滑鼠事件不執行(e.handle=f

wpfListView控制元件點選列頭排序功能實現(超簡潔實用)

 .xaml檔案中的主要程式碼 <ListView Name="lvMeasureData" GridViewColumnHeader.Click="Sort_Click" SelectionChanged="lvMeasureData_SelectionChanged"