WPF / C#でカーソルをテキストボックスにフォーカス
現在、オンスクリーンキーボードを作成しています。 routedcommandsを使用してボタンのクリックを処理しています。問題は、キーボードパネルのボタンをクリックすると、フォーカスがテキストボックスではなくボタンに移動することです。要件では、カーソルは常にテキストボックスに表示され、次の文字が挿入される位置を示す必要があります。ボタンがクリックされている間、テキストボックスにフォーカスを保つことができる方法はありますか?.
入力コントロールに論理フォーカスを設定するには
FocusManager.SetFocusedElement(this, textboxJack); // set logical focus
キーボードフォーカスを入力コントロールに設定するには
Keyboard.Focus(textboxJill); // set keyboard focus
論理フォーカスとキーボードフォーカスの違いを知る
入力の概要-フォーカス MSDNで
特定のコントロール(その場合はTextBox)の参照を取得します。クリックした後、Button_Clickメソッドにこれを貼り付けます。
Dispatcher.BeginInvoke((ThreadStart)delegate
{
control.Focus();
});
私はこれらのdo-my-homework-for-meの質問が好きです。 「要件の状態」...価格なし。 Googleでこれを見つけた人にとって、WPF TextBoxでカーソルをプログラム的に移動するコツは、SelectioNStartプロパティを使用することです。
private void Button_Click(object sender, RoutedEventArgs e)
{
textBox.Focus();
textBox.SelectionStart = textName.Text.Length;
}
Textbox.Focus();
これはテキストボックスに焦点を当てます
この問題を解決した方法は、focusable=false
キーボードのすべてのボタン/コントロールに。そうすれば、現在のコントロールに集中できなくなることはありません。
希望する結果を得るためにこれを使用する必要がありました
FocusManager.SetFocusedElement(this, UserNameautoCompleteBox);
Key key = Key.Enter; // Key to send
var target = Keyboard.FocusedElement; // Target element
RoutedEvent routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(UserNameautoCompleteBox),
0,
key) { RoutedEvent = routedEvent }
);
あなたの「キーボード」に別のフォーカススコープを使用することであなたの問題を解決できます。すべてのボタンを含むコントロールに次のプロパティを適用するだけで、ボタンは別のフォーカススコープになり、クリックされたときにフォーカスが設定されません。
FocusManager.IsFocusScope="True"
同じことをしたかったのですが、うまくいかなかったようです。 MVVMを使用しているため、XAMLでのみ機能する回答が本当に必要でした。
私はついにこの例を見つけました: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
これを次のように変更しました:
「リソース」セクション:
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
私のグリッド定義では:
<Grid Style="{StaticResource FocusTextBox}" />