我们的“表单页面”用户控件在当前可见页面中不可见且位于当前可见页面下方的时候从未被禁用,当新页面被推到顶部时。因此,它们包含在标签索引行为中,导致不需要的副作用。
这帮助我得到这个问题的底部:
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);
}
顺便说一句 - 有没有TabControl的只是按钮,复选框,标签等,在一个网格。 – jchristof
你不能指望别人来帮助你解决问题,而不会发布你的代码 – makc
据我所知,你必须保持用户创建表单的标签索引在文件中,并将这些标签索引分配给用户创建表单的所有控件。 – YOusaFZai