在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
内,但是,在尚未显示的选项卡上,QuickTime控件会抛出InvalidActiveXStateException
。我认为任何ActiveX / COM控件都会抛出该错误;我猜WindowsFormsHost
处于某种“无效的ActiveX状态”,直到单击并显示其父选项卡。我的问题是:应该在哪个事件处理程序(在哪个对象上)构造播放器? WindowsFormsHost最初处于非活动状态的TabItem何时准备就绪并已加载,就像Window_Loaded触发时一样?
最佳答案
我想到的第一个解决方案是在处理TabItem_GotFocus事件的方法中创建播放器。目前工作正常,但是如果对此解决方案有任何疑问,我想知道:)
另外,由于GotFocus是这样的常规事件,因此我很难理解为什么WinForms主机确实可以这样做。答案是否只是像“ tabitem的内容在获得焦点时呈现,就像窗口在加载时呈现”那样?
关于c# - WPF:TabItem何时真正加载,呈现并完全准备就绪?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13469552/