TabItem标题:如果实际的标题标题,内容不会延伸

And*_*old 5 wpf

我有一个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(可能是任何容器控件)也会发生同样的事情.

Ale*_*rey 6

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.HorizontalContentAlignmentStretch解决这个问题对我来说.

<TabControl HorizontalContentAlignment="Stretch" />
Run Code Online (Sandbox Code Playgroud)

  • 大!这比其他解决方案容易得多. (2认同)
  • 伟大的一个衬里,如此明显,我应该看到它。 (2认同)
  • 伟大而简单的答案!:) (2认同)

Rac*_*hel 2

尝试覆盖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)