2017-05-01 43 views
1

我使用C#/ WPF使UI。WPF:限制首标区的宽度的最大尺寸在TabControl的

我的UI对为了用户的方便标签控制的报头区域中的按钮。

问题是,如果添加了许多翼片,最后一个(或如果它具有多行,它们中的一个)可以通过这些按钮覆盖像红色矩形在附加的图片:

Last tab

有什么办法来限制的TabControl的头部区域的最大宽度,但保持内容区域进行的TabItems宽度是多少?

当前XAML:

<Grid> 
    <Grid HorizontalAlignment="Stretch"> 
     <TabControl BorderThickness="0,0,0,1" Margin="0,0,0,0"> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
      <TabItem MinWidth="130" Height="27" Content="Title" /> 
     </TabControl> 
    </Grid> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> 
     <Button Margin="0,2,5,0" HorizontalAlignment="Left" Height="20" Width="22" VerticalAlignment="top" Content="+" /> 
     <Button Width="65" Height="25" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,0,1,1" Content="Close" /> 
    </StackPanel> 
</Grid> 

`

注:在我的脑海之上,我也许能以溢出父使用负边距的TabItems(TabControl的)的宽度,但它可能是一个糟糕的解决方法。

请让我知道什么是在这种情况下,一个不错的办法。

回答

1

您可以定义自己的TabControl风格,或者更具体的ControlTemplate,插入一个 “ButtonPanel” 是这样的:

<TabControl.Style> 
        <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> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="*" /> 
              <ColumnDefinition Width="Auto" /> 
             </Grid.ColumnDefinitions> 
             <VisualStateManager.VisualStateGroups> 
              <VisualStateGroup x:Name="CommonStates"> 
               <VisualState x:Name="Disabled"> 
                <Storyboard> 
                 <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
                         Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"> 
                  <EasingColorKeyFrame KeyTime="0" 
                       Value="#FFAAAAAA" /> 
                 </ColorAnimationUsingKeyFrames> 
                </Storyboard> 
               </VisualState> 
              </VisualStateGroup> 
             </VisualStateManager.VisualStateGroups> 
             <TabPanel x:Name="HeaderPanel" 
                Grid.Row="0" 
                Panel.ZIndex="1" 
                Margin="0,0,4,-1" 
                IsItemsHost="True" 
                KeyboardNavigation.TabIndex="1" 
                Background="Transparent" /> 
             <StackPanel x:Name="ButtonPanel" Grid.Column="1" Orientation="Horizontal"> 
              <Button Margin="0,2,5,0" 
                HorizontalAlignment="Left" 
                Height="20" 
                Width="22" 
                VerticalAlignment="top" 
                Content="+" /> 
              <Button Width="65" 
                Height="25" 
                HorizontalAlignment="Right" 
                VerticalAlignment="Top" 
                Margin="0,0,1,1" 
                Content="Close" /> 
             </StackPanel> 
             <Border x:Name="Border" 
               Grid.Row="1" 
               Grid.ColumnSpan="2" 
               BorderThickness="1" 
               CornerRadius="2" 
               KeyboardNavigation.TabNavigation="Local" 
               KeyboardNavigation.DirectionalNavigation="Contained" 
               KeyboardNavigation.TabIndex="2"> 
              <Border.Background> 
               <LinearGradientBrush EndPoint="0.5,1" 
                    StartPoint="0.5,0"> 
                <GradientStop Color="{DynamicResource ContentAreaColorLight}" 
                    Offset="0" /> 
                <GradientStop Color="{DynamicResource ContentAreaColorDark}" 
                    Offset="1" /> 
               </LinearGradientBrush> 
              </Border.Background> 
              <Border.BorderBrush> 
               <SolidColorBrush Color="{DynamicResource BorderMediumColor}" /> 
              </Border.BorderBrush> 
              <ContentPresenter x:Name="PART_SelectedContentHost" 
                   Margin="4" 
                   ContentSource="SelectedContent" /> 
             </Border> 
            </Grid> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </TabControl.Style>