在我的WPF应用程序中,我有一个类作为QuickTime的包装器。它提供了我需要的所有特定或简化功能。要运行,需要创建QuickTime的ActiveX控件实例并将其放在有效的Windows窗体窗口中。我的应用程序是WPF,构造函数的工作方式如下:
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
对象的构造函数试图将AxQTControl
置于提供的WindowsFormsHost
内,Hwever位于尚未显示的选项卡上, QuickTime控件抛出InvalidActiveXStateException
。我想任何ActiveX / COM控件都会抛出它;我猜WindowsFormsHost
处于某种“无效的ActiveX状态”,直到单击并显示其父标签。
我的问题是:在哪个事件处理程序(在哪个对象上)应构建播放器? 什么时候WindowsFormsHost内部最初处于非活动状态,TabItem是否已准备好并加载,就像Window_Loaded触发时一样?
答案 0 :(得分:1)
我提出的第一个解决方案是在处理 TabItem_GotFocus 事件的方法中创建播放器。目前工作正常,但如果有任何问题,我想知道:)
此外,由于GotFocus是如此普遍的事件,我很难理解为什么WinForms主机确实没问题。答案就像是“tabitem的内容在获得焦点时呈现,就像窗口在加载时呈现一样”?