在 winrt 文本框上捕获 Tab KeyUp
Capture Tab KeyUp on a winrt textbox
我正在构建一个要在企业中使用的 XAML 应用程序 (winrt)。应用程序中的某些表单可能很复杂:某些输入会根据其他输入获得 shown/hidden。我想使用所有输入(TextBox、PasswordBow、ComboBox...)上的行为来控制 Tab 键导航,以优化用户 activity.
我订阅了 TextBox 的 KeyUp
事件,但是 当用户按下 Tab 键时没有引发该事件。因此,可视化树中的下一个元素将获得键盘焦点。
我发现没有方法可以像 winform 的 IsInputKey
那样覆盖。
如何订阅在文本框上使用 Tab 键?
看起来新的焦点元素收到了 KeyUp
事件。
我所做的是订阅 KeyDown
事件,检查 Tab 键并将事件标记为已处理。
protected override void OnAttached()
{
var textBox = (TextBox)this.AssociatedObject;
textBox.KeyDown += this.OnKeyDown;
textBox.KeyUp += this.OnKeyUp;
// don't forget to unsubscribe in OnDetached
}
private void OnKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Tab && !e.Handled)
{
e.Handled = this.Work(sender, e);
}
}
private void OnKeyUp(object sender, KeyRoutedEventArgs e)
{
if (e.Key != VirtualKey.Tab && !e.Handled)
{
e.Handled = this.Work(sender, e);
}
}
这是对焦的方法。代码在OnKeyUp
我才知道怎么做
/// <returns>true if an action has been performed (focus next or execute command)</returns>
private bool Work(object sender, KeyRoutedEventArgs e)
{
var isEnterKey = e.Key == VirtualKey.Enter;
var isTabKey = e.Key == VirtualKey.Tab;
if (/* there is something else to focus */)
{
// focus it
return true;
}
return false;
}
我的问题是在 KeyUp 事件中没有收到 Tab 虚拟键,而其他键(Esc、Enter、字母数字键)收到了。我只是将它更改为具有相同处理程序的 KeyDown。用户似乎感觉不到差异。
我正在构建一个要在企业中使用的 XAML 应用程序 (winrt)。应用程序中的某些表单可能很复杂:某些输入会根据其他输入获得 shown/hidden。我想使用所有输入(TextBox、PasswordBow、ComboBox...)上的行为来控制 Tab 键导航,以优化用户 activity.
我订阅了 TextBox 的 KeyUp
事件,但是 当用户按下 Tab 键时没有引发该事件。因此,可视化树中的下一个元素将获得键盘焦点。
我发现没有方法可以像 winform 的 IsInputKey
那样覆盖。
如何订阅在文本框上使用 Tab 键?
看起来新的焦点元素收到了 KeyUp
事件。
我所做的是订阅 KeyDown
事件,检查 Tab 键并将事件标记为已处理。
protected override void OnAttached()
{
var textBox = (TextBox)this.AssociatedObject;
textBox.KeyDown += this.OnKeyDown;
textBox.KeyUp += this.OnKeyUp;
// don't forget to unsubscribe in OnDetached
}
private void OnKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Tab && !e.Handled)
{
e.Handled = this.Work(sender, e);
}
}
private void OnKeyUp(object sender, KeyRoutedEventArgs e)
{
if (e.Key != VirtualKey.Tab && !e.Handled)
{
e.Handled = this.Work(sender, e);
}
}
这是对焦的方法。代码在OnKeyUp
我才知道怎么做
/// <returns>true if an action has been performed (focus next or execute command)</returns>
private bool Work(object sender, KeyRoutedEventArgs e)
{
var isEnterKey = e.Key == VirtualKey.Enter;
var isTabKey = e.Key == VirtualKey.Tab;
if (/* there is something else to focus */)
{
// focus it
return true;
}
return false;
}
我的问题是在 KeyUp 事件中没有收到 Tab 虚拟键,而其他键(Esc、Enter、字母数字键)收到了。我只是将它更改为具有相同处理程序的 KeyDown。用户似乎感觉不到差异。