2012-02-15 6 views
0

Windowsフォームホストに格納されたActiveXコントロールを含むwpf usercontrolがあります。私は ViewModel1を言うMVVMパターンを使用してい はピュアWPFビューにマップされ、 ViewModel2は、WPFのコンテンツと上記のユーザーコントロールにマップされているWPFのActiveXコントロールWindowsフォームホストが表示されなくなってから表示されない

ViewModel2は「隠し」で、その後の内部その後、ActiveXコントロールの可視になった場合それは表示されません(特に私はVLCのActiveXコントロールについて話しています)。

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

EDIT - 私は自分のwpfアプリケーションで透明性を持っているため、これが発見されました。 windowsformshostと透過性を有効にして、私が望むことを実行することができないようです。

答えて

2

私の経験を共有します。 wpfウィンドウで透明度がオンになっていると、HiddenからVisableに変更すると、ウィンドウフォームのホストがリフレッシュされません。 "Allowstransparency = false"という新しいウィンドウでホストされていない限り、私はこの作業を行う方法が見つけられませんでした。

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); 
} 

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

+0

私はVlcHostと呼ばれる私のグリッドにwindowsformshostを持っています - それで、 "_vlcPlayer = new AxVLCPlugin2();"というusercontrolの初期化中に追加します。 "VlcHost.Child = _vlcPlayer;" - これはうまくいきますが、私はusercontrolを隠し、再び見えるようにするために、アクティブなコントロールは見えません。新しいソースを設定することができるので、まだアクセス可能です。 – Oli

+0

あなたは_vlcPlayer.Refresh();を試しましたか? – ROFLwTIME

関連する問題