C# WPF如何通过设置索引来操作选项卡序列?
现在想象一下,我有十个控件都绑定在一个C# WPF如何通过设置索引来操作选项卡序列?,c#,wpf,tabs,navigation,C#,Wpf,Tabs,Navigation,现在想象一下,我有十个控件都绑定在一个堆栈面板中 默认情况下,当按下TAB时,焦点将从控件1移动到控件10。 现在我想要的是,在焦点从control1移动到control2之后,当用户再次按下TAB时,焦点将返回到control1。到目前为止,我只能通过使用KeyboardNavigation.TabIndex=“N”where N=“0,1,2,3,…”来搞乱序列,但我最终想要的是跳过剩下的8个控件 请不要建议TabNavigation=“NONE”或IsTabStop=“False”跳过控件
堆栈面板中
默认情况下,当按下TAB
时,焦点将从控件1移动到控件10。
现在我想要的是,在焦点从control1
移动到control2
之后,当用户再次按下TAB
时,焦点将返回到control1
。到目前为止,我只能通过使用KeyboardNavigation.TabIndex=“N”where N=“0,1,2,3,…”
来搞乱序列,但我最终想要的是跳过剩下的8个控件
请不要建议TabNavigation=“NONE”或IsTabStop=“False”跳过控件,我不想弄乱其他控件,是的,我对硬编码序列很好。覆盖您想要控制的控件上的预览键向下事件,如果它的选项卡,则执行您想要的操作
下面是一个例子,如果它像一个文本框,你可以使用这样的东西。在c#或xaml中调用事件处理程序
btn1.PreviewKeyDown += new KeyEventHandler(btn1_KeyDown);
btn2.PreviewKeyDown += new KeyEventHandler(btn2_KeyDown);
然后
@我添加了一个例子,主要是我不知道如何将焦点移回控件1。这十个控件实际上都是按钮。@IsaacLem我添加了一个例子。“如果有帮助,请告诉我。”我很乐意帮忙。
private void btn1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
{
//do what you want when shift+tab is pressed.
e.Handled = true;
}
else
{
btn2.Focus();
e.Handled = true;
}
}
private void btn2_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
{
//do what you want when shift+tab is pressed.
e.Handled = true;
}
else
{
btn1.Focus();
e.Handled = true;
}
}