TextBox
とToolBar
にButton
を付けています。 TextBox
と入力してButton
をクリックすると、TextBox
がFocus
を失ってバインディングが更新されます。 TextBox
にUpdateSourceTrigger=PropertyChanged
を追加したくありません。しかし、代わりにButton
をクリックすると、Focus
をメインウィンドウにリセットします。これにより、現在開いているものがFocus
を失い、バインディングが更新されます。
次のようにボタンにOnClick
を追加しようとしましたが、機能しないようです。
private void Button_Click(object sender, RoutedEventArgs e) {
FocusManager.SetFocusedElement(this, null);
}
任意のヒントをいただければ幸いです。
ありがとう、ラウル
問題は、ツールバーがボタンを別の_FocusManager.FocusScope
_に配置することです。これは、Button
とTextBox
の両方が同時に論理フォーカスを受け取り、それぞれが独自のスコープ内にあることを意味します。通常、これは良いことです。メニュー項目とツールバーボタンを選択したときに、メインウィンドウ領域でフォーカスを失いたくないのですが、この場合、実行中の作業が妨げられます。
ツールバーの_FocusManager.IsFocusScope
_プロパティをオーバーライドして必要な効果を得ることができますが、他のすべてのツールバーボタンもメインウィンドウ領域からフォーカスを奪うため、これはおそらく最良の計画ではありません。
代わりに、いくつかの簡単なソリューションの1つを使用できます。
textBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
を呼び出して手動で更新を強制する同様の問題が発生しました。 Enterキーが押されたときにテキストボックスのフォーカスを解除する必要があります。私はこのコードで終わります:
var scope = FocusManager.GetFocusScope(elem); // elem is the UIElement to unfocus
FocusManager.SetFocusedElement(scope, null); // remove logical focus
Keyboard.ClearFocus(); // remove keyboard focus
ダミーコントロールを作成するよりもクリーンで、再利用可能だと思います。しかし、私はこの解決策に自信がありません。しかし、それはうまくいくようです。