#c# #wpf #xaml
#c# #wpf #xaml
Вопрос:
Я создаю пользовательское текстовое поле даты и хочу, чтобы оно вело себя (делая это в коде):
При фокусировке он устанавливает текст в текущую дату и время, формат: дд.ММ.гггг и выбирает часть «dd». (т.е.SelectionStart = 0, т.е.SelectionLength = 2).
Затем я хочу нажать tab, чтобы изменить выделение на часть «ММ». (t.SelectionStart = 3; t.SelectionLength = 2;)
[«t» — текущее текстовое поле]
Код, который у меня есть:
private void DateTextBox_PreviewKeyUp(object sender, KeyEventArgs e)
{
TextBox t = sender as TextBox;
if(e.Key == Key.Tab)
{
if(t.SelectionStart == 0)
{
t.SelectionStart = 3; t.SelectionLength = 2;
} else if(t.SelectionStart == 3)
{
t.SelectionStart = 6; t.SelectionLength = 4;
} else
{
t.SelectionStart = 0; t.SelectionLength = 2;
}
e.Handled = false;
}
}
Пробовал e.Обработал false и true. Ничего не изменилось.
Теперь он ведет себя так: я нажимаю на предыдущий элемент управления (текстовое поле тоже), нажимаю Tab, фокус переходит к этому текстовому полю, другое событие устанавливает выделение для первых двух символов, снова нажимаю Tab, фокус переходит к следующему элементу пользовательского интерфейса.
Как заставить Tab работать только в этом текстовом поле, как только туда попадет фокус?
Ответ №1:
Хорошо, измените PreviewKeyUp на PreviewKeyDown, и это сработает. Действие нажатия кнопки Tab вызвало пользовательский интерфейс для фокусировки на следующем элементе пользовательского интерфейса до того, как могло сработать событие PreviewKeyUp.