我有一个TabControl,我试图让标题看起来不错.我有以下XAML:
(在Resources.xaml:)
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel LastChildFill="True" MinWidth="200" Height="20" HorizontalAlignment="Stretch" behaviors:MouseClickBehavior.ClickCommand="{Binding Path=CloseCommand}">
<Image Source="{Binding Path=Image}" Height="16" VerticalAlignment="Center" />
<Button Background="Transparent"
BorderBrush="Transparent"
Command="{Binding Path=CloseCommand}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
Focusable="False"
FontSize="9"
FontWeight="Bold"
Margin="3,0,0,0"
Padding="0"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
Width="16" Height="16" />
<TextBlock Text="{Binding Path=Header}" DockPanel.Dock="Left" VerticalAlignment="Center" />
</DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
(在MainWindow.xaml:)
<TabControl Grid.Column="1"
ItemsSource="{Binding Path=Tabs}"
ItemTemplate="{DynamicResource ClosableTabItemTemplate}" />
Run Code Online (Sandbox Code Playgroud)
这是我的问题的一个直观的例子:

我现在喜欢标签的实际宽度,但是标题的dockpanel没有填满所有空间的事实很麻烦.如果我也使用a Grid(可能是任何容器控件)也会发生同样的事情.
ContentPresenter.HorizontalAlignment在默认样式TabItem中绑定ItemsControl.HorizontalContentAlignment.在这里,取自Aero.NormalColor.xaml:
<ContentPresenter Name="Content"
ContentSource="Header"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
HorizontalAlignment="{Binding Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
VerticalAlignment="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
RecognizesAccessKey="True"/>
Run Code Online (Sandbox Code Playgroud)
设置TabControl.HorizontalContentAlignment来Stretch解决这个问题对我来说.
<TabControl HorizontalContentAlignment="Stretch" />
Run Code Online (Sandbox Code Playgroud)
尝试覆盖ItemContainerStyle.Template而不是ContentTemplate
我过去做过类似的事情,尽管我覆盖了整个TabControl模板,所以很难看出我在做什么。我的代码如下所示:
<ControlTemplate x:Key="CurvedTabItemTemplate" TargetType="{x:Type TabItem}">
<DockPanel Width="200">
<ContentPresenter x:Name="ContentSite" ContentSource="Header" RecognizesAccessKey="True" />
</DockPanel>
</ControlTemplate>
<Style x:Key="CurvedTabItemStyle" TargetType="{x:Type TabItem}">
<Setter Property="Template" Value="{StaticResource CurvedTabItemTemplate}" />
</Style>
<TabControl Grid.Column="1" ItemsSource="{Binding Path=Tabs}"
ContentTemplate="{DynamicResource ClosableTabItemTemplate}"
ItemContainerStyle="{DynamicResource CurvedTabItemStyle}" />
Run Code Online (Sandbox Code Playgroud)