Подтвердить что ты не робот

Фокус курсора в текстовом поле в WPF/С#

В настоящее время я создаю экранную клавиатуру. Я обрабатываю кнопку с помощью маршрутизируемых команд. Проблема в том, что когда я нажимаю кнопку на панели клавиатуры, фокус переходит на кнопку, а не на текстовое поле. В требовании указано, что курсор всегда должен появляться в текстовом поле, чтобы указать позицию, в которую будет вставлен следующий символ. Есть ли способ, которым я могу сосредоточиться на текстовом поле при нажатии кнопки.

4b9b3361

Ответ 1

Чтобы установить логическую фокусировку на входное управление

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

Чтобы настроить фокус клавиатуры на входное управление

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

Чтобы узнать разницу между логическим и клавиатурным фокусом

Обзор ввода - Фокус в MSDN

Ответ 2

Получить ссылку для конкретного элемента управления (в этом случае TextBox). После нажатия в методе Button_Click вставьте это:

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

Ответ 3

Мне нравятся эти вопросы о моей домашней задаче для меня; "требование гласит:"... бесценно. Для тех, кто находит это через Google, трюк для прогматического перемещения курсора в текстовом поле WPF заключается в использовании свойства SelectioNStart.

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

Ответ 4

Textbox.Focus();

это будет сосредоточено на текстовом поле

Ответ 5

Как я решил эту проблему, было установить focusable=false на все кнопки/элементы управления на клавиатуре. Таким образом, вы не теряете сосредоточенность на текущем контроле.

Ответ 6

Ваша проблема может быть решена с помощью отдельной области фокусировки для вашей "клавиатуры". Просто примените следующее свойство к элементу управления, содержащему все ваши кнопки, и затем они будут находиться в отдельной области фокусировки и не будут иметь фокус, установленный для них при нажатии

FocusManager.IsFocusScope="True"

Ответ 7

Мне пришлось использовать это, чтобы получить желаемый результат

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 }
);

Ответ 8

Я хотел сделать то же самое, но ничего не работало для меня. Мне действительно нужен был ответ, который работал исключительно в XAML, когда я работаю с MVVM.

Наконец я нашел этот пример: 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}" />