0

mvvm パターンを使用して WPF アプリケーションを開発しています。そして、奇妙な問題が私に起こりました。devexpress DXGrid コントロールを含むフォームがあります。プレゼンターのダブルクリック ジェスチャにバインドされたコマンドがあります。コマンドがトリガーされると、新しいウィンドウが作成され、ファクトリ クラスを介して表示されます (Show() メソッドが使用されます)。

そのため、このウィンドウが表示されているときに、アプリケーション全体 (すべてのアプリケーション ウィンドウ) がブロックされることがあります。このロックアップは、他のアプリケーションにフォーカスすると消えます。

この問題は、devexpress のバージョンを更新した後に初めて発生しました。その後、グリッド行をダブルクリックした後に新しいウィンドウが表示されるたびに、この問題が発生しました。この問題は、新しいウィンドウの Owner プロパティを設定することで部分的に修正されました。

現在、この問題は時々発生します。ここにスレッドが関係しているように見えますが、その方法がわかりません。=(

ps: もう 1 つ奇妙なことがあります。新しいウィンドウが表示され、ロックアップの問題が発生していない場合、最初のウィンドウにはまだフォーカスがあり、配置されたコントロールを使用するには、新しく表示されたウィンドウをクリックする必要があります。

私が試してみました:

  • ShowActivated プロパティを設定する
  • Show() の後に Activate() を呼び出す
  • newform.Dispatcher.CheckAccess() を
    使用して、どのスレッドが Show()
    メソッドを呼び出しているかを判断します
  • 表示後に newform.IsActive プロパティを確認します (値 = true)

修正方法を教えてください。ありがとうございました。

4

1 に答える 1

0

新しく表示されたウィンドウではなく、最初のウィンドウがフォーカスされる問題を修正するには、新しいウィンドウの show メソッドを呼び出した後、次の操作を行う必要があります。

Mouse.Capture(null);

うまくいけば、問題は解決されるでしょう。

于 2011-06-02T14:33:51.873 に答える