2

私には2つのプロジェクトがあるソリューションがあります。メインプロジェクトと、同様に使用される小さな共有コントロールです。このアプリケーションでは、特定の機能によってこの共有コントロールが新しいウィンドウで開きます。ウィンドウが開いたときに、このコントロールの最初のコンボボックスにフォーカスを設定したいと思います。

私のコードでは、共有コントロールをロードするウィンドウで、_Loadedイベントの最後に、このコンボボックスにフォーカスを設定しました。しかし、コードを実行するときは、タブを押して「キーボード」をボックスにフォーカスさせる必要があります(たとえば、タブを押して、リスト内のアイテムの1つの名前の入力を開始する必要があります)。

ここでブレークポイントを設定し、それをヒットしてから続行すると、実際には本来あるべき方法で設定されます。WPFインスペクターを使用する場合-IsFocusedも設定されます。

他に気づいたこと:

  • タブを押して(必要なものを取得するために)タブを戻すと、この不明なコントロールではなく、フォームの最後のコントロールに移動します。これにより、フォーカスが正しく設定されていると思いますが、何らかの理由でキーボードのフォーカスが正しくありません。
  • コードでMoveNextを使用しようとすると、実際には、コントロールの外にあるウィンドウ内の次の項目が選択されます。

ここでフォーカスを適切に設定するにはどうすればよいですか?'main'プロジェクトの別のコンボボックスでは、.Focus()を呼び出すだけで正しく機能しました。

4

1 に答える 1

3

すべてのイベントが処理され、バインディングがQueueUserWorkItemで更新された後、focus()を延期してみてください。このようなもの :

   public  delegate void  VoidDelegate();

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // Some other things to do here.
        System.Threading.ThreadPool.QueueUserWorkItem
                       (x => this.Dispatcher.Invoke(
                                  new VoidDelegate(SetFocus), null));
    }

    private void SetFocus()
    {
        MyControlIWantToSetFocusOn.Focus();
    }
于 2012-07-11T11:23:28.193 に答える