web-dev-qa-db-ja.com

WPF / C#でカーソルをテキストボックスにフォーカス

現在、オンスクリーンキーボードを作成しています。 routedcommandsを使用してボタンのクリックを処理しています。問題は、キーボードパネルのボタンをクリックすると、フォーカスがテキストボックスではなくボタンに移動することです。要件では、カーソルは常にテキストボックスに表示され、次の文字が挿入される位置を示す必要があります。ボタンがクリックされている間、テキストボックスにフォーカスを保つことができる方法はありますか?.

19
deepak

入力コントロールに論理フォーカスを設定するには

FocusManager.SetFocusedElement(this, textboxJack);     // set logical focus

キーボードフォーカスを入力コントロールに設定するには

Keyboard.Focus(textboxJill);                             // set keyboard focus

論理フォーカスとキーボードフォーカスの違いを知る

入力の概要-フォーカス MSDNで

35
Gishu

特定のコントロール(その場合はTextBox)の参照を取得します。クリックした後、Button_Clickメソッドにこれを貼り付けます。

Dispatcher.BeginInvoke((ThreadStart)delegate
            {
                control.Focus();
            });
8
mashet

私はこれらのdo-my-homework-for-meの質問が好きです。 「要件の状態」...価格なし。 Googleでこれを見つけた人にとって、WPF TextBoxでカーソルをプログラム的に移動するコツは、SelectioNStartプロパティを使用することです。

private void Button_Click(object sender, RoutedEventArgs e)
{
    textBox.Focus();
    textBox.SelectionStart = textName.Text.Length;
}
5
Josh F.
Textbox.Focus();

これはテキストボックスに焦点を当てます

3
gokul

この問題を解決した方法は、focusable=falseキーボードのすべてのボタン/コントロールに。そうすれば、現在のコントロールに集中できなくなることはありません。

2
Jonas Stawski

希望する結果を得るためにこれを使用する必要がありました

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 }
);
1
Brendan Botond

あなたの「キーボード」に別のフォーカススコープを使用することであなたの問題を解決できます。すべてのボタンを含むコントロールに次のプロパティを適用するだけで、ボタンは別のフォーカススコープになり、クリックされたときにフォーカスが設定されません。

FocusManager.IsFocusScope="True"
1
Xiaosu

同じことをしたかったのですが、うまくいかなかったようです。 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}" />
0
Anya Hope