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

下一篇: interactions between views