В настоящее время я создаю экранную клавиатуру. Я обрабатываю кнопку с помощью маршрутизируемых команд. Проблема в том, что когда я нажимаю кнопку на панели клавиатуры, фокус переходит на кнопку, а не на текстовое поле. В требовании указано, что курсор всегда должен появляться в текстовом поле, чтобы указать позицию, в которую будет вставлен следующий символ. Есть ли способ, которым я могу сосредоточиться на текстовом поле при нажатии кнопки.
Фокус курсора в текстовом поле в WPF/С#
Ответ 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}" />