繁体   English   中英

WPF:TabItem何时真正加载,呈现并完全准备就绪?

[英]WPF: When is a TabItem actually loaded, rendered and completly ready?

在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的内容在获得焦点时呈现,就像窗口在加载时呈现”那样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM