WPF многострочный TabControl без перестановки строк - PullRequest
8 голосов
/ 04 апреля 2011

WPF TabControl со своей стандартной панелью TabPanel размещает элементы вкладок в несколько строк, когда горизонтальный размер слишком мал.Затем выбор вкладки меняет порядок этих строк, поэтому выбранный элемент вкладки всегда находится в первой строке.

Я нашел несколько статей о том, как заменить TabPanel на другой элемент управления, поэтому вместо поведения нескольких строк они получаютпрокрутка вкладок.

Я хотел бы сохранить несколько строк (без прокрутки), но отключить перестановку строк.После создания вкладок они должны оставаться на месте, независимо от того, как изменяется выбор.Это возможно?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вы пытались переопределить стиль по умолчанию чем-то вроде этого? то есть: использовать обертку вместо TabPanel?

<Style x:Key="{x:Type TabControl}" TargetType="{x:Type TabControl}">        
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabControl}">                    
                <Grid TabNavigation="Local" SnapsToDevicePixels="true" ClipToBounds="true">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Name="ColumnDefinition0" />
                        <ColumnDefinition Name="ColumnDefinition1" Width="0" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Name="RowDefinition0" Height="Auto" />
                        <RowDefinition Name="RowDefinition1" Height="*" />
                    </Grid.RowDefinitions>
                    <WrapPanel Name="HeaderPanel" ZIndex="1" TabIndex="1" Column="0" Row="0" Margin="2,2,2,0" IsItemsHost="true" />
                    <Border Name="ContentPanel" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" TabNavigation="Local" DirectionalNavigation="Contained" TabIndex="2" Column="0" Row="1">
                        <ContentPresenter Name="PART_SelectedContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent" />
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
0 голосов
/ 30 мая 2011

Единственное решение, которое я нашел, - это изменение класса TabPanel фреймворка так, чтобы его метод int GetActiveRow(int[] solution) всегда возвращал 0. Хотя это решает проблему, я не уверен, что так можно использовать исходный код фреймворка.

...