【问题标题】:WPF how to manipulate tab sequence by setting index?WPF如何通过设置索引来操作制表符序列?
【发布时间】:2014-01-17 14:14:43
【问题描述】:

现在想象一下,我有十个控件都绑定在 stackpanel 中。

默认情况下,当按下TAB时,焦点将从控件1随后移动到控件10。 现在我想要的是,在焦点从control 1 移动到control 2 之后,当用户再次按下TAB 时,焦点将回到control 1。到目前为止,我只能通过使用KeyboardNavigation.TabIndex="N" where N = "0,1,2,3,.." 来处理序列,但我最终想要的是跳过剩余的 8 个控件。

请不要建议 TabNavigation="NONE" 或 IsTabStop="False" 跳过控件,我不想与其他控件混淆,是的,我对硬编码序列很好.

【问题讨论】:

    标签: c# wpf tabs navigation


    【解决方案1】:

    覆盖您想要控制的控件上的预览键按下事件,如果它的选项卡则执行您想要的操作。

    这是一个例子,如果它是一个类似文本框的东西,你可以使用这样的东西。在 c# 或 xaml 中附加事件处理程序。

    btn1.PreviewKeyDown += new KeyEventHandler(btn1_KeyDown);
    btn2.PreviewKeyDown += new KeyEventHandler(btn2_KeyDown);
    

    然后

    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;
        }
    
    }
    

    【讨论】:

    • @IsaacLem 我添加了一个示例。
    • 主要是我不知道如何将焦点移回控件1。实际上所有十个控件都是按钮。
    • @IsaacLem 我添加了示例。让我知道这是否有帮助。
    • @IsaacLem 乐于提供帮助。
    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多