2013-12-10 2 views
0

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

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

+0

BTW - Там нет TabControl только кнопки, флажки, наклейки и т.д. в сетке. – jchristof

+0

Вы не можете ожидать, что кто-то поможет вам решить проблему, не публикуя свой код – makc

+0

, исходя из того, что я понимаю, вам нужно сохранить индекс вкладки созданной пользователем формы в файле и назначить эти индексы индексов всем элементам формы пользовательской формы. – YOusaFZai

ответ

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); 
} 
Смежные вопросы