WPF Windows窗体主机中的ActiveX控件在显示后不显示
我有一个wpf用户控件,它包含一个安装在windowsformhost中的activex控件。 我使用的是MVVM模式,它将ViewModel1映射到纯WPF视图,并将ViewModel2映射到wpf内容以及上述用户控件
如果ViewModel2是“隐藏”,然后变得可见,那么它内部的Activex控件不会显示(具体来说,我正在谈论VLC ActiveX控件)。
我用一个按钮和usercontrol在非MVVM模式下进行了测试。 usercontrol被隐藏,直到你按下按钮并且发生了同样的事情,但是如果我在usercontrol中创建了一个方法来重新将activex控件附加到windowsformhost,它就会重新出现。 如果我从视图模型调用这个方法,那么它仍然是空白的。 有谁知道我可以如何让它再次显示?
编辑 - 我刚刚发现这是因为我在我的wpf应用程序中具有透明度。 它似乎不能做我想要的windowsformshost和透明度启用。
由于没有明显的答案,我会分享我的经验。 当在wpf窗口中打开透明度时,当从隐藏更改为可见时,窗体主机不会刷新。 我发现没有办法使这项工作,除非它是在一个新的窗口与“Allowstransparency = false”托管。
你如何设置你的主动x控件? 如果你只是需要它连接到一个网格,以下内容通常适用于WPF。 不需要用户控制:
//Active X Control initializer
private Ax addAxObject<Ax>(Grid container)
where Ax : System.Windows.Forms.Control, new()
{
Ax ax = new Ax();
var hoster = new System.Windows.Forms.Integration.WindowsFormsHost();
hoster.Child = (System.Windows.Forms.Control)ax;
container.Children.Add(hoster);
return ax;
}
private MyActiveXControl myActiveXControl;
public Grid InitializeActiveX(Grid grid)
{
myActiveXControl = addAxObject<myActiveXControl>(grid);
return grid;
}
然后你所做的就是将它添加到你的主窗口中的网格中,如下所示:
public MainWindow()
{
InitializeComponent();
//initialize Active X control
gridMain = InitializeActiveX(gridMain);
}
它对我来说显得很好。 (显然不在设计器中,因为它是编程创建的)
链接地址: http://www.djcxy.com/p/56173.html上一篇: ActiveX Control In WPF Windows Form Host Not Displaying After Becoming Visible