0

windowsformhost に格納された activex コントロールを含む wpf ユーザーコントロールがあります。ViewModel1 が純粋な WPF ビューにマップされ、ViewModel2 が wpf コンテンツと上記のユーザー コントロールにマップされるという MVVM パターンを使用しています。

ViewModel2 が「非表示」になってから可視になると、その内部の Activex コントロールは表示されません (具体的には、VLC ActiveX コントロールについて話しています)。

ボタンとユーザーコントロールを使用して、非 MVVM パターンでテストしました。ボタンを押すまでユーザーコントロールは非表示になり、同じことが起こりますが、ユーザーコントロールにメソッドを作成してactivexコントロールをwindowsformhostに再アタッチすると、再び表示されます。ビューモデルからこのメソッドを呼び出すと、まだ空白のままです。これを再び表示する方法を知っている人はいますか?

編集-wpfアプリケーションで透過性をオンにしていることが原因であることがわかりました。windowsformshost と透過性を有効にすると、私がやりたいことができないようです。

4

2 に答える 2

2

明確な答えはないので、私の経験を共有します。wpf ウィンドウで透明度がオンになっている場合、非表示から表示に変更すると、Windows フォーム ホストが更新されません。「Alwaystransparency = false」を使用して新しいウィンドウでホストされていない限り、これを機能させる方法が見つかりませんでした。

于 2012-05-23T18:07:08.483 に答える
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);
}

それは私にとってはうまく表示されます。(プログラムで作成されるため、明らかにデザイナーにはありません)

于 2012-02-15T04:02:45.247 に答える