2012-11-20 36 views
2

在我的WPF應用程序,我有作爲的QuickTime周圍的包裝類。它提供了我需要的所有特定或簡化功能。要運行,它需要創建一個QuickTime的ActiveX控件的實例,並將其放置在有效的Windows窗體中。我的應用程序是WPF,構造器的工作原理是這樣的:WPF:TabItem何時實際加載,呈現並完全準備好?

public VideoPlayerQT(WindowsFormsHost wfHost) { 
    AxQTControl qtControl = new AxQTControl(); 
    wfHost.Child = qtControl; 
} 

現在在主窗口中,我使用的球員是這樣的:

private VideoPlayerQT videoPlayer;  

private void MainWindow_Loaded(object sender, RoutedEventArgs e) { 
    this.videoPlayer = new VideoPlayerQT(myWinFormsHost); 
} 

這工作,直到我把WindowsFormsHost一個TabControl內。我想從一開始就沒有正確顯示的標籤上。

這將導致一個奇怪的現象:我VideoPlayerQT對象的構造函數試圖將提供的WindowsFormsHost,Hwever,是一個還未顯示選項卡上,QuickTime的控制拋出InvalidActiveXStateExceptionAxQTControl。我認爲任何ActiveX/COM控件都會拋出它;我猜WindowsFormsHost是在一些「無效的ActiveX狀態」,直到其父選項卡點擊和顯示。

我的問題是:在該事件處理程序(上對象)要建設的播放器? 準備並加載最初處於非活動狀態的TabItem中的WindowsFormsHost何時與Window_Loaded激發時相同?

回答

1

我想出的第一個解決方案是在處理TabItem_GotFocus事件的方法中創建播放器。現在工作正常,但如果有任何趕上這個解決方案,我想知道:)

此外,由於GotFocus是這樣的一般事件,我很難理解爲什麼確切是這個WinForms主機好。答案就像「當tabitem的內容在獲得焦點時呈現,就像窗口在加載時呈現」一樣?

+2

您是否嘗試過的「裝」事件? :) – Sisyphe

相關問題