Выбранная вкладка изменяется с помощью шаблонных WPF TabControls внутри внешнего TabControl - PullRequest
0 голосов
/ 22 июня 2011

У меня есть пользовательский интерфейс WPF с внешним TabControl, чьи TabItems содержат внутренние TabControls, как это:

<TabControl>
    <TabItem Header="Tab1">
        <TabControl>
            <TabItem Header="TabA">
            </TabItem>
            <TabItem Header="TabB">
            </TabItem>
        </TabControl>
    </TabItem>
    <TabItem Header="Tab2">
        <TabControl>
            <TabItem Header="TabC">
            </TabItem>
            <TabItem Header="TabD">
            </TabItem>
        </TabControl>
    </TabItem>
</TabControl>

При переключении с Tab1 на Tab2 на внешнем TabControl, внутренние TabControls запоминают свой выбор. Пример: выберите Tab1, выберите TabB, выберите Tab2, выберите Tab1, и вы увидите, что TabB все еще выбран.

Эта согласованность распадается, когда я меняю шаблоны TabControl. Фактически, выбранная вкладка на внутренних элементах TabControls кажется случайным образом изменяющимся при переходе от Tab1 к Tab2 на внешнем элементе TabControl. Вот несколько примеров шаблонов:

<Window.Resources>
    <ControlTemplate x:Key="TabControlTemplate1" TargetType="{x:Type TabControl}">
        <DockPanel>
            <StackPanel Orientation="Vertical" DockPanel.Dock="Left" IsItemsHost="True"/>
            <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
        </DockPanel>
    </ControlTemplate>
    <ControlTemplate x:Key="TabControlTemplate2" TargetType="{x:Type TabControl}">
        <DockPanel>
            <UniformGrid Rows="1" DockPanel.Dock="Top" IsItemsHost="True"/>
            <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
        </DockPanel>
    </ControlTemplate>
</Window.Resources>
<TabControl Template="{DynamicResource TabControlTemplate1}">
    <TabItem Header="Tab1">
        <TabControl Template="{DynamicResource TabControlTemplate2}">
            <TabItem Header="TabA">
            </TabItem>
            <TabItem Header="TabB">
            </TabItem>
        </TabControl>
    </TabItem>
    <TabItem Header="Tab2">
        <TabControl Template="{DynamicResource TabControlTemplate2}">
            <TabItem Header="TabC">
            </TabItem>
            <TabItem Header="TabD">
            </TabItem>
        </TabControl>
    </TabItem>
</TabControl>

Как шаблонизировать элементы управления внешней и внутренней вкладок и поддерживать выбранное состояние вкладки на элементах управления внутренней вкладки?

1 Ответ

0 голосов
/ 22 июня 2011

Вы пробовали управлять выбором вкладки через ViewModel? Если вы используете шаблон ViewModel, было бы не очень сложно связать атрибут SelectedItem с базовым свойством, чтобы обновить его при изменении выбора.

Я использовал это раньше в ListViews, где я изменял ItemTemplates во время выполнения, чтобы защитить выбранный Item. Я не понимаю, почему это не сработает и в этом случае.

...