wpfで修正するこのような単純な問題のように見えることに頭を悩ませていますが、アプリを計画どおりに動作させることができない理由をまだ発見していません。
ユーザーがctrl+fを押すと、wpfアプリケーションにポップアップする小さな検索ボックスがあります。私が欲しいのは、キャレットが検索ボックスのテキストボックス内で点滅し、ユーザーがクリックしなくてもユーザー入力を受け取る準備ができていることです。これは、表示、有効化、ヒットテスト可能、タブストップ可能、フォーカス可能なテキストボックスのxamlコードです。
<TextBox x:Name="SearchCriteriaTextBox" Text="{Binding SearchCriteria}" Focusable="True" IsEnabled="True" IsTabStop="True" IsHitTestVisible="True" Style="{DynamicResource SearchTextBoxStyle}" Grid.Column="1" Margin="5,10,0,5" />
コードビハインドでは、検索ボックスの表示が影響を受けたときにこのメソッドを呼び出しています。検索ボックスはアプリの起動時に読み込まれます。
/// <summary>
/// Handles events triggered from focusing on this view.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="dependencyPropertyChangedEventArgs">The key event args.</param>
private void OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
if (!((bool) dependencyPropertyChangedEventArgs.NewValue))
{
return;
}
SearchCriteriaTextBox.Focus();
Keyboard.Focus(SearchCriteriaTextBox);
SearchCriteriaTextBox.Select(0, 0);
if (SearchCriteriaTextBox.Text.Length > 0)
{
SearchCriteriaTextBox.SelectAll();
}
}
問題は、コードが呼び出され、コンポーネントがIsFocused = trueになりますが、キーボードフォーカスが取得されないことです。私は何かが足りないのですか?別のコントロールがキーボードのフォーカスを激しく保持し続けない限り、私はコーディングしなかったと確信していますが、なぜこのかなり単純なコードが正しく機能しないのでしょうか。