Проблема с индексом вкладки WPF

Я работаю над приложением, в котором пользователь определяет элементы управления в форме и может установить индекс вкладки любого элемента управления. Когда каждый элемент управления добавляется в сетку, содержащую видимую область формы, индекс вкладки устанавливается либо на 0 (по умолчанию), либо на какой-либо пользовательский индекс вкладки. Переход через форму работает нормально до тех пор, пока tabindex одного из элементов управления не будет изменен во время выполнения (индекс, похоже, не имеет значения). позиции табуляции (их не было до изменения tabindex). Кроме того, свойства табуляции меню не привязаны к какому-либо контексту данных.

Элемент управления, который в настоящее время изменен, представляет собой флажок, но я не могу воспроизвести поведение с упрощенным макетом, поэтому любые предложения помогут.


person jchristof    schedule 10.12.2013    source источник
comment
Кстати, в сетке нет TabControl, только кнопки, флажки, метки и т. Д.   -  person jchristof    schedule 11.12.2013
comment
Вы не можете ожидать, что кто-то поможет вам решить проблему, не опубликовав свой код.   -  person makc    schedule 11.12.2013
comment
насколько я понимаю, вы должны сохранить индекс вкладок формы, созданной пользователем, в файле и назначить эти индексы вкладок всем элементам управления формы, созданной пользователем.   -  person YOusaFZai    schedule 11.12.2013
comment
да, некоторые индексы вкладок назначаются при компиляции или по умолчанию. Во время выполнения любой из индексов вкладок может быть переназначен. Переназначение приводит к тому, что цикл таблицы прерывается и застревает на элементе управления — обычно на элементе управления с индексом по умолчанию или 0 и обычно с табулированием с помощью Shift-Tab (назад).   -  person jchristof    schedule 16.12.2013


Ответы (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);
}
person jchristof    schedule 17.01.2014