首页 文章

WPF标签索引问题

提问于
浏览
0

我正在开发一个应用程序,用户在窗体上定义控件,并可以设置任何控件的选项卡索引 . 当每个控件添加到包含可查看表单区域的网格时,选项卡索引设置为0(默认)或某些用户定义的选项卡索引 . 通过表单切换工作正常,直到其中一个控件的tabindex在运行时更改(索引似乎无关紧要 . )此后,tabbing只循环一些控件,此外,窗口菜单项现在是制表位(它们不在tabindex更改之前 . )此外,菜单的制表符属性未绑定到任何datacontext .

当前更改的控件是一个复选框,但我无法使用简化的布局重现该行为,因此任何建议都会有所帮助 .

1 回答

  • 1

    我们的“表单页面”用户控件不可见,当前可见页面下方的新页面被推到顶部时从未被禁用 . 因此,它们被包含在选项卡索引行为中,从而导致不必要的副作用 .

    这帮助我解决了问题的根源:

    void InitializeFocusLogger() {
            //debug key logging to make focus bugs easier to track
            EventManager.RegisterClassHandler(
                typeof(UIElement),
                Keyboard.PreviewGotKeyboardFocusEvent,
                (KeyboardFocusChangedEventHandler)OnPreviewGotKeyboardFocus);
    }
    
    string lastID = string.Empty;
    private void OnPreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)         {
        FrameworkElement control = e.NewFocus as FrameworkElement;
        if (control == null) return;
    
        ControlViewModel controlVM = control.DataContext as ControlViewModel;
    
        if (controlVM == null || lastID == controlVM.ID) return;
    
        lastID = controlVM.ID;
    
        Debug.Print("Focused: {0} TabIndex: {1}", controlVM.ID, controlVM.TabIndex);
    }
    

相关问题