2015-09-09 4 views
1

Я хотел бы иметь более широкую границу для моих tabitems, не меняя поведения по умолчанию.C# WPF, делающий tabitem границу немного толще

Я провел некоторое исследование, и мне кажется, что мне нужно работать с ControlTemplate, но это переопределяет поведение по умолчанию (то есть цвет фона ушел, цвет фона остается неизменным, независимо от того, выбран он или нет. не выделяется синим цветом, когда я наводил курсор мыши на заголовок вкладки и т. д.)

Как я могу просто настроить границу, не нарушая текущего поведения?

Спасибо!

ответ

1

Прежде всего сказать, что tabItem не несет ответственности за то, как выглядит содержимое tabcontrol.

У вас есть 2 варианта. Первый - загрузить Blend. Создайте копии стилей по умолчанию для TabItem и TabControl и внесите изменения. Это гораздо проще, чем это звучит

Второй один должен сделать следующее:

 private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     var tabControlContentPanel = tb.Template.FindName("ContentPanel", tb) as Border; 
     tabControlContentPanel.BorderThickness = new Thickness(10); 

     foreach (TabItem tabItem in tb.Items) 
     { 
      var tabItemHeader = tabItem.Template.FindName("Bd", tabItem) as Border; 
      tabItemHeader.BorderThickness = new Thickness(10); 
     } 
    } 

Просто убедитесь, что загружены TabControl и TabItems, в противном случае «FindName» возвратит нуль

Обновление:

Я поделюсь с вами стилями по умолчанию для TabControl и TabItem, но я настоятельно рекомендую вам взглянуть на Blend. Используйте их, как это:

<TabControl HorizontalAlignment="Left" MouseDown="tb_MouseDown" Name="tb" Height="300" VerticalAlignment="Top" Style="{DynamicResource TabControlStyle1}"> 
      <TabItem Header="TabItem" Style="{DynamicResource TabItemStyle1}" > 
       <Grid Background="#FFE5E5E5"/> 
      </TabItem> 
</TabControl> 

Стили:

<Window.Resources> 
     <SolidColorBrush x:Key="TabControlNormalBorderBrush" Color="#8C8E94"/> 
     <Style x:Key="TabControlStyle1" TargetType="{x:Type TabControl}"> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
      <Setter Property="Padding" Value="4,4,4,4"/> 
      <Setter Property="BorderThickness" Value="1"/> 
      <Setter Property="BorderBrush" Value="{StaticResource TabControlNormalBorderBrush}"/> 
      <Setter Property="Background" Value="#F9F9F9"/> 
      <Setter Property="HorizontalContentAlignment" Value="Center"/> 
      <Setter Property="VerticalContentAlignment" Value="Center"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TabControl}"> 
         <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition x:Name="ColumnDefinition0"/> 
           <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition x:Name="RowDefinition0" Height="Auto"/> 
           <RowDefinition x:Name="RowDefinition1" Height="*"/> 
          </Grid.RowDefinitions> 
          <TabPanel x:Name="HeaderPanel" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/> 
          <Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"> 
           <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="TabStripPlacement" Value="Bottom"> 
           <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="1"/> 
           <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/> 
           <Setter Property="Height" TargetName="RowDefinition0" Value="*"/> 
           <Setter Property="Height" TargetName="RowDefinition1" Value="Auto"/> 
           <Setter Property="Margin" TargetName="HeaderPanel" Value="2,0,2,2"/> 
          </Trigger> 
          <Trigger Property="TabStripPlacement" Value="Left"> 
           <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/> 
           <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/> 
           <Setter Property="Grid.Column" TargetName="HeaderPanel" Value="0"/> 
           <Setter Property="Grid.Column" TargetName="ContentPanel" Value="1"/> 
           <Setter Property="Width" TargetName="ColumnDefinition0" Value="Auto"/> 
           <Setter Property="Width" TargetName="ColumnDefinition1" Value="*"/> 
           <Setter Property="Height" TargetName="RowDefinition0" Value="*"/> 
           <Setter Property="Height" TargetName="RowDefinition1" Value="0"/> 
           <Setter Property="Margin" TargetName="HeaderPanel" Value="2,2,0,2"/> 
          </Trigger> 
          <Trigger Property="TabStripPlacement" Value="Right"> 
           <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/> 
           <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/> 
           <Setter Property="Grid.Column" TargetName="HeaderPanel" Value="1"/> 
           <Setter Property="Grid.Column" TargetName="ContentPanel" Value="0"/> 
           <Setter Property="Width" TargetName="ColumnDefinition0" Value="*"/> 
           <Setter Property="Width" TargetName="ColumnDefinition1" Value="Auto"/> 
           <Setter Property="Height" TargetName="RowDefinition0" Value="*"/> 
           <Setter Property="Height" TargetName="RowDefinition1" Value="0"/> 
           <Setter Property="Margin" TargetName="HeaderPanel" Value="0,2,2,2"/> 
          </Trigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <Style x:Key="TabItemFocusVisual"> 
      <Setter Property="Control.Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Rectangle Margin="3,3,3,1" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#F3F3F3" Offset="0"/> 
      <GradientStop Color="#EBEBEB" Offset="0.5"/> 
      <GradientStop Color="#DDDDDD" Offset="0.5"/> 
      <GradientStop Color="#CDCDCD" Offset="1"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="TabItemHotBackground" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#EAF6FD" Offset="0.15"/> 
      <GradientStop Color="#D9F0FC" Offset=".5"/> 
      <GradientStop Color="#BEE6FD" Offset=".5"/> 
      <GradientStop Color="#A7D9F5" Offset="1"/> 
     </LinearGradientBrush> 
     <SolidColorBrush x:Key="TabItemSelectedBackground" Color="#F9F9F9"/> 
     <SolidColorBrush x:Key="TabItemHotBorderBrush" Color="#3C7FB1"/> 
     <SolidColorBrush x:Key="TabItemDisabledBackground" Color="#F4F4F4"/> 
     <SolidColorBrush x:Key="TabItemDisabledBorderBrush" Color="#FFC9C7BA"/> 
     <Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}"> 
      <Setter Property="FocusVisualStyle" Value="{StaticResource TabItemFocusVisual}"/> 
      <Setter Property="Foreground" Value="Black"/> 
      <Setter Property="Padding" Value="6,1,6,1"/> 
      <Setter Property="BorderBrush" Value="{StaticResource TabControlNormalBorderBrush}"/> 
      <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TabItem}"> 
         <Grid SnapsToDevicePixels="true"> 
          <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"> 
           <ContentPresenter x:Name="Content" ContentSource="Header" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="true"> 
           <Setter Property="Background" TargetName="Bd" Value="{StaticResource TabItemHotBackground}"/> 
          </Trigger> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter Property="Panel.ZIndex" Value="1"/> 
           <Setter Property="Background" TargetName="Bd" Value="{StaticResource TabItemSelectedBackground}"/> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="false"/> 
            <Condition Property="IsMouseOver" Value="true"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource TabItemHotBorderBrush}"/> 
          </MultiTrigger> 
          <Trigger Property="TabStripPlacement" Value="Bottom"> 
           <Setter Property="BorderThickness" TargetName="Bd" Value="1,0,1,1"/> 
          </Trigger> 
          <Trigger Property="TabStripPlacement" Value="Left"> 
           <Setter Property="BorderThickness" TargetName="Bd" Value="1,1,0,1"/> 
          </Trigger> 
          <Trigger Property="TabStripPlacement" Value="Right"> 
           <Setter Property="BorderThickness" TargetName="Bd" Value="0,1,1,1"/> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="TabStripPlacement" Value="Top"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Margin" Value="-2,-2,-2,-1"/> 
           <Setter Property="Margin" TargetName="Content" Value="0,0,0,1"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="TabStripPlacement" Value="Bottom"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Margin" Value="-2,-1,-2,-2"/> 
           <Setter Property="Margin" TargetName="Content" Value="0,1,0,0"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="TabStripPlacement" Value="Left"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Margin" Value="-2,-2,-1,-2"/> 
           <Setter Property="Margin" TargetName="Content" Value="0,0,1,0"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="TabStripPlacement" Value="Right"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Margin" Value="-1,-2,-2,-2"/> 
           <Setter Property="Margin" TargetName="Content" Value="1,0,0,0"/> 
          </MultiTrigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Background" TargetName="Bd" Value="{StaticResource TabItemDisabledBackground}"/> 
           <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource TabItemDisabledBorderBrush}"/> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
+0

Вы получаете стиль, используя Blend, или файл XAML (правой кнопкой мыши на элементе управления и выберите Изменить вариант шаблона)? Я спрашиваю об этом, потому что в качестве решения для этого вопроса я попытался отредактировать шаблон, получив его из XAML, но потом я не получил Setter для шаблона TabItem. – Ankit

+0

Я не совсем понимаю ваш вопрос. У меня есть эти стили с помощью blend, выполнив «Редактировать шаблон» -> «Редактировать копию», а затем скопировав результат из xaml – netaholic

+0

Я пробовал то же самое через XAML, но мне не удалось получить стиль TabItem. Шаблон редактирования в контекстном меню был недоступен/отключен. Есть идеи? – Ankit

Смежные вопросы