У меня есть список, в котором элементы являются текстовыми полями.Мне нужно установить ключ, чтобы изменить фокус на следующее текстовое поле и начать редактирование его содержимого.Я обманул решение, отправляющее нажатия клавиш для достижения того, чего я хочу, например:
((TextBox)listBox1.Items[0]).KeyDown += (object x, KeyEventArgs y) => {
if (y.Key == Key.Enter) {
InputSimulator.SimulateKeyDown(VirtualKeyCode.TAB);
InputSimulator.SimulateKeyPress(VirtualKeyCode.DOWN);
InputSimulator.SimulateKeyDown(VirtualKeyCode.TAB);
}
};
Я использую библиотеку InputSimulator, найденную здесь http://inputsimulator.codeplex.com/ для этого подхода.Я знаю, что это не правильный способ сделать это, поэтому я спрашиваю, как я могу добиться того же, используя методы фокусировки.Я пытаюсь использовать следующий код, но получаю ошибку «вне диапазона», которую не понимаю:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 3; i++)
{
listBox1.Items.Add(new TextBox() {
TabIndex=i
});
}
for (int i = 0; i < listBox1.Items.Count-1; i++)
{
((TextBox)listBox1.Items[i]).KeyDown += (object x, KeyEventArgs y) => { if (y.Key == Key.Tab) { Keyboard.Focus((TextBox)listBox1.Items[i+1]); } };
}
((TextBox)listBox1.Items[listBox1.Items.Count - 1]).KeyDown += (object x, KeyEventArgs y) => { if (y.Key == Key.Tab) { Keyboard.Focus((TextBox)listBox1.Items[0]); }};
}