WPF标签索引问题

时间:2013-12-10 20:06:51

标签: wpf tabindex

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

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

1 个答案:

答案 0 :(得分: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);
}