Пользовательский элемент управления вкладками wpf с одной постоянной вкладкой, все остальные вкладки можно прокручивать - PullRequest
0 голосов
/ 13 июля 2011

Мне нужно создать элемент управления, который имеет одну постоянную вкладку («home»), а все остальные вкладки можно прокручивать.

Сейчас я пытаюсь достичь этого результата, создав подкласс TabControl, добавив дополнительную кнопку (которая выглядит как вкладка) к переопределенному шаблону и устанавливая SelectedIndex в -1 при каждом нажатии кнопки. Когда SelectedIndex равно -1, триггер вызывает привязку ContentControl TabControl к содержимому специальной вкладки «Главная». По сути, я имитирую поведение реальной вкладки и отменяю возможность отмены выбора всех вкладок при этом.

Кажется, это работает, за исключением двух проблем:

  1. Выберите пример вкладки # 3, затем выберите дом. Затем попробуйте снова выбрать вкладку № 3. Вкладка № 3 не отвечает.
  2. Выберите вкладку # 3, затем выберите дом. Затем попробуйте использовать меню, которое находится в том же окне. Когда я иду в меню, # 3 снова появляется как выбранная вкладка.

В этот момент я пытался прослушать все виды событий, связанных с TabControl, но ни одно из них, похоже, не дает мне того, с чем я могу работать, чтобы обойти это поведение.

Есть ли что-то, что позволит мне переопределить поведение по умолчанию SelectedIndex? Должен ли я делать это по-другому? В идеале я хотел бы получить какой-то способ собрать коллекцию вкладок, которая позволяет визуально разделять вкладки, не теряя основной функциональности TabControl.

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Единственный способ сделать это - использовать собственный ControlTemplate для элемента управления вкладками. Вы можете использовать StyleSnooper , чтобы получить текущий шаблон. То, что является частью этого шаблона, должно быть заменено пользовательской панелью, которую вы написали. Вы основываете это на Panel. Вам нужно всего лишь переопределить ArrangeOverride, чтобы он располагал вкладку «Главная» на своем месте, а остальные в зависимости от положения прокрутки.

0 голосов
/ 18 июля 2011

Я смог реализовать это, написав свою собственную панель вкладок, как предложил AresAvatar.Тем не менее, панель должна быть расширена от реализации ConceptualPanel с http://www.codeproject.com/KB/WPF/ConceptualChildren.aspx. Проблема заключается в том, что на панели должно быть IsItemsHost="true" в шаблоне TabControl, чтобы сохранить поведение выбора вкладок.К сожалению, если обычная панель является хостом элементов, ее дети не могут быть изменены из ее собственного кода класса.Поэтому я не мог добавить нужные мне кнопки прокрутки.Мне удалось обойти эту проблему с помощью ConceptualPanel, добавив все (вкладки + кнопки прокрутки) через AddVisualChild.

Возможно, есть лучший способ сделать это, но это сработало для меня.

...