我有一个wpf usercontrol,其中包含一个安装在windowsformhost中的activex控件。 我正在使用MVVM模式 ViewModel1映射到Pure WPF View和 ViewModel2映射到wpf内容和上面的usercontrol
如果ViewModel2为“Hidden”然后变为Visible,则其中的Activex控件不显示(具体而言,我所说的是VLC activex控件)。
我已经使用按钮和用户控件在非MVVM模式中进行了测试。用户控件是隐藏的,直到您按下按钮并发生相同的事情,但如果我在usercontrol中创建一个方法以将activex控件重新附加到windowsformhost,则它会重新出现。如果我从viewmodel调用此方法,那么它仍然是空白的。有谁知道我怎么能再次展示它?
编辑 - 我刚刚发现它是因为我的wpf应用程序中有透明度。似乎不可能在windowsformshost和透明度启用的情况下做我想要的事情。
答案 0 :(得分:2)
由于没有明显的答案,我将分享我的经验。在wpf窗口中打开透明度时,从隐藏更改为可见时,窗体主机不会刷新。除非它被托管在一个“Allowstransparency = false”的新窗口中,否则我发现无法完成这项工作。
答案 1 :(得分:0)
您是如何设置主动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);
}
它显示对我来说很好。 (显然不是在设计器中,因为它是以编程方式创建的)