Это будет включать настраиваемый ControlTemplate для TabControl. Я попробовал пример с использованием DockPanel в качестве хоста элементов, а не TabPanel по умолчанию.
<Style TargetType="{x:Type TabControl}">
<Setter Property="OverridesDefaultStyle"
Value="True" />
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid KeyboardNavigation.TabNavigation="Local">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<DockPanel Name="HeaderPanel"
LastChildFill="False"
Grid.Row="0"
Panel.ZIndex="1"
Margin="0,0,4,-1"
IsItemsHost="True"
KeyboardNavigation.TabIndex="1"
Background="Transparent" />
<Border Name="Border"
Grid.Row="1"
Background="WhiteSmoke"
BorderBrush="Black"
BorderThickness="1"
CornerRadius="2"
KeyboardNavigation.TabNavigation="Local"
KeyboardNavigation.DirectionalNavigation="Contained"
KeyboardNavigation.TabIndex="2">
<ContentPresenter Name="PART_SelectedContentHost"
Margin="4"
ContentSource="SelectedContent" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Проблема в том, что я не знаю способа раскрыть свойство DockPanel.Dock для TabItems за пределами ControlTemplate E.G.
<TabControl Margin="10">
<TabItem Header="Tab One" DockPanel.Dock="Left"/>
<TabItem Header="Tab Two" DocKPanel.Dock="Left"/>
<TabItem Header="Tab Three" DocKPanel.Dock="Left"/>
<TabItem Header="Tab Four" DocKPanel.Dock="Right"/>
</TabControl>
// Note: This does not work!!
Я думаю, вам нужно будет написать свою собственную панель для размещения TabItems; Обратите внимание, что это будет довольно много работы, так как вам нужно будет обрабатывать такие вещи, как поведение переполнения, которое встроено в TabPanel.
Даже если вы попробуете это сделать, я думаю, вам придется написать собственный TabControl, если вы хотите предоставить эту функциональность за пределами ControlTemplate.
Если вы хотите пойти по этому пути, посмотрите мой ответ в этом сообщении
person
Benjamin Gale
schedule
17.01.2011