[紹介]サンプルの WPF アプリケーションがあります。ボタンをクリックすると、新しいウィンドウが開きます。内部にデータがロードされるまでしばらく待つ必要があります。受け身で待つのではなく、その間に別のことをしたい。たとえば、コンテキスト メニューを開くことができます。この状況を次の画面に示します。
この待機ウィンドウは、ロードが完了した直後 (データを表示する準備ができている) に、フォーカスがグリッドに設定されたイベントを発生させます。
void DataLoaded(object sender, EventArgs e)
{
grid.Focus();
grid.SelectedIndex = 0;
}
[現在の問題]残念ながら、まったく同じ瞬間に、最近開いたコンテキスト メニューが消えてしまいました。フォーカスが強制的に盗まれました。迷惑な最終的な効果を以下に示します。
【望む効果】ハッピーエンドとは?ユーザーが他の要素 (コンテキスト メニューなど) に変更した場合、自動フォーカスは行われません。つまり、フォーカスを奪わないでください。
コードの変更は次のとおりです。
void DataLoaded(object sender, EventArgs e)
{
if (Magic.FocusNotChanged)
{
grid.Focus();
grid.SelectedIndex = 0;
}
}
しかし、魔法とは何ですか?自動フォーカス変更を許可または拒否するグローバル パブリッシュ サブスクライブ メカニズムはありますか? フォーカスの変更をスパイしているハンドラーはありますか?
ところで: 上記の特定のアプリケーションは、より広いコンテキストから人為的に抽出されたものです。ここで実装されたレイアウトにはあまり注意を払わないでください。この特定のボタンやコンテキスト メニューに関係なく、いくつかの一般的なメカニズムを考案する必要があります。手がかりはありますか?よろしく。