1

私は空域の問題で立ち往生しています。私のWPFアプリはwinformコンポーネントをホストしています。コンポーネントの読み込み中や長時間のアクティビティ中に、「お待ちください」というテキストを含むポップアップを表示したいと思います。ここで問題が発生します。ポップアップは正しく表示されますが、コンポーネントのビジーイベントを処理すると、ポップアップコンテンツを更新できません。ここにいくつかのコードXAML:

<WindowsFormsHost Name="wfh" Grid.Row="1" Grid.Column="0" ></WindowsFormsHost>
<Popup x:Name="Overlay" AllowsTransparency="True" Placement="Center" 
       StaysOpen="True"
       IsOpen="True" 
       PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor,   AncestorType=Grid, AncestorLevel=1}}">
    <TextBlock Name="tbWait"  Foreground="Red" />
</Popup>

およびc#:

myWinformComponent.Event => (s, e) => 
{ 
   tbWait.Text = e.IsBusy ?  "Loading..." : string.Empty;
}

WinFormとWPFのAirspaceの問題はわかっていますが、ポップアップを常に開いたままにして、windowformshostのコンテンツを表示できるようにする必要がありました。

編集:コードビハインドにいくつかのブレークポイントを配置していますが、Textプロパティが正しく変更されているのがわかります。この変更はUIに表示されません。

回避策や解決策はありますか?君たちありがとう!

4

2 に答える 2

0

@HansPassant のコメントによると、次の行で強制的に再描画できます。

DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
        frame.Continue = false;
        return null;
    }), null);
Dispatcher.PushFrame(frame);

多分それは最もエレガントな解決策ではないかもしれませんが、私の問題に対する有効なパッチです。

于 2012-09-26T07:30:04.090 に答える
-2

残念ながら、WindowsFormsHost で WPF コンテンツを表示することはできません。私は長い間この癖と戦っていましたが、最終的にあきらめて UI を再配置し、オーバーレイが WinForms コンポーネントの上にある必要がないようにしました。

于 2012-09-25T12:49:15.270 に答える