通过按某个键在 WPF 中从控件切换到控件
Switching from control to control in WPF by pressing some key
我需要通过按回车键实现从文本框到文本框、按钮到文本框等的切换,所以我想知道是否有一些简单的方法可以做到这一点,比如 WIN FORM,将 属性 更改为优先级 1 ,2,3,4 和当用户按下 enter 控件时,将按数字从低到高切换。
在 wpf 中我找不到那个解决方案,但我找到了这个,所以我想知道可以吗?!
这是我的代码:
private void Grid_PreviewKeyDown_1(object sender, KeyEventArgs e)
{
try
{
if (e.Key == Key.Enter)
{
TextBox s = e.Source as TextBox;
if (s != null)
{
s.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
else
{
ComboBox cb = e.Source as ComboBox;
if (cb != null)
{
cb.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
else
{
Button b = e.Source as Button;
if (b != null)
{
b.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
}
e.Handled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
我的控件包含在网格中。
谢谢大家
干杯!
由于 Grid
的所有子元素共享相同的基础 class (UIElement
) 你应该能够稍微简化代码:
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
UIElement element = e.Source as UIElement;
element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
我需要通过按回车键实现从文本框到文本框、按钮到文本框等的切换,所以我想知道是否有一些简单的方法可以做到这一点,比如 WIN FORM,将 属性 更改为优先级 1 ,2,3,4 和当用户按下 enter 控件时,将按数字从低到高切换。
在 wpf 中我找不到那个解决方案,但我找到了这个,所以我想知道可以吗?!
这是我的代码:
private void Grid_PreviewKeyDown_1(object sender, KeyEventArgs e)
{
try
{
if (e.Key == Key.Enter)
{
TextBox s = e.Source as TextBox;
if (s != null)
{
s.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
else
{
ComboBox cb = e.Source as ComboBox;
if (cb != null)
{
cb.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
else
{
Button b = e.Source as Button;
if (b != null)
{
b.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
}
e.Handled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
我的控件包含在网格中。
谢谢大家 干杯!
由于 Grid
的所有子元素共享相同的基础 class (UIElement
) 你应该能够稍微简化代码:
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
UIElement element = e.Source as UIElement;
element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}