2016-11-17 11 views
1

У меня есть элемент управления вкладкой с некоторыми статическими вкладками. Однако я также хотел бы добавить некоторые дополнительные вкладки динамически. Поэтому я определил шаблон заголовка (используя TabControl.ItemTemplate) и шаблон контента (используя TabControl.ContentTemplate). Тем не менее, статические вкладки будут показывать различный контент, и поэтому я устанавливаю шаблон содержимого отдельного элемента Tab. Однако по какой-то причине шаблон содержимого элемента, который я создал для установки содержимого вкладки, также применяется к заголовку.WPF Tab Шаблон управления переопределением для отдельного содержимого вкладки

Из прилагаемого скриншота и кода вы можете видеть, что, хотя заголовок вкладки имеет значение «Электронная почта», содержимое вкладки отображается как в заголовке, так и в разделе содержимого.

Пожалуйста, дайте мне знать, если вам нужно дополнительное разъяснение.

<TabControl Name="ResultsTabControl" SelectionChanged="Selector_OnSelectionChanged" Margin="-2,2" SelectedIndex="{Binding SelectedResultsTab, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 

<TabControl.Resources> 
    <Style TargetType="TabItem" BasedOn="{StaticResource AccentedMetroTabItemStyle}"></Style> 
</TabControl.Resources> 

<TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" /> 
    </DataTemplate> 
</TabControl.ItemTemplate> 

<TabControl.ContentTemplate> 
    <DataTemplate> 
     <TextBlock Text="Testing"/> 
    </DataTemplate> 
</TabControl.ContentTemplate> 

<TabItem Name="EmailListTab" Header="Emails" Style="{StaticResource AccentedMetroTabItemStyle}"> 
    <TabItem.ContentTemplate> 
     <DataTemplate> 
       <TextBlock Text="My Emails Tab"/> 
     </DataTemplate> 
    </TabItem.ContentTemplate> 
</TabItem> 

<Style x:Key="AccentedMetroTabItemStyle" TargetType="{x:Type TabItem}"> 
    <Setter Property="Padding" Value="2 1 2 1" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Border x:Name="Border" 
         HorizontalAlignment="Stretch" 
         Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
        <StackPanel HorizontalAlignment="Stretch" Orientation="Vertical"> 
         <StackPanel Margin="{TemplateBinding Padding}" Orientation="Horizontal"> 
          <controls1:ContentControlEx x:Name="ContentSite" 
                 Margin="0 2 2 0" 
                 Padding="{TemplateBinding Padding}" 
                 Foreground="{TemplateBinding Foreground}" 
                 FontSize="15" 
                 FontWeight="{TemplateBinding controls1:ControlsHelper.HeaderFontWeight}" 
                 FontStretch="{TemplateBinding controls1:ControlsHelper.HeaderFontStretch}" 
                 Content="{TemplateBinding Header}" 
                 ContentCharacterCasing="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(controls1:ControlsHelper.ContentCharacterCasing)}" 
                 ContentStringFormat="{TemplateBinding ContentStringFormat}" 
                 ContentTemplate="{TemplateBinding ContentTemplate}" 
                 ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}" 
                 RecognizesAccessKey="True" 
                 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </StackPanel> 
         <Rectangle x:Name="Underline" 
            Height="2" 
            Margin="0 1 0 0" 
            HorizontalAlignment="Stretch" 
            Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=(controls1:TabControlHelper.IsUnderlined), Converter={StaticResource BooleanToVisibilityConverter}}" /> 
        </StackPanel> 
       </Border> 
       <ControlTemplate.Triggers> 

        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource AccentColorBrush}" /> 
         <Setter TargetName="Underline" Property="Fill" Value="{DynamicResource AccentColorBrush}" /> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="false"> 
         <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource GrayNormalBrush}" /> 
         <Setter TargetName="Underline" Property="Fill" Value="{DynamicResource GrayNormalBrush}" /> 
        </Trigger> 
        <Trigger SourceName="ContentSite" Property="IsMouseOver" Value="True"> 
         <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource GrayHoverBrush}" /> 
         <Setter TargetName="Underline" Property="Fill" Value="{DynamicResource GrayHoverBrush}" /> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition SourceName="ContentSite" Property="IsMouseOver" Value="True" /> 
          <Condition Property="IsSelected" Value="True" /> 
         </MultiTrigger.Conditions> 
         <Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="{DynamicResource HighlightBrush}" /> 
         <Setter TargetName="Underline" Property="Fill" Value="{DynamicResource HighlightBrush}" /> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

TabControl

+0

Вы должны показать, что находится в 'AccentedMetroTabItemStyle' –

+0

Чувак, удаление чего-то важного из вопроса не означает, что оно поможет решить вопрос. Скопируйте/вставьте этот отредактированный код в новое окно, тогда вы увидите, что проблемы больше нет. Поэтому я бы сказал, что ваша проблема все еще в этом стиле. –

+0

Приношу свои извинения. Когда я ошибаюсь, я говорю, что я неправ. Будет ли повторное редактирование вопроса на мгновение. Просто нужно получить разрешение от некоторых сотрудников. –

ответ

1

Дело в том, что мы не знаем, что происходит в controls1:ContentControlEx.

И в принципе вам не хватает ContentPresenter для заголовка в вашем стиле:

<ContentPresenter x:Name="contentPresenter" ContentSource="Header" Focusable="False" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 

Это может быть частью controls1:ContentControlEx, но тогда вы должны показать, что хорошо.

+0

Спасибо, вы и @Maulik Parmar оба помогли мне указать в правильном направлении. –