У меня есть элемент управления вкладкой с некоторыми статическими вкладками. Однако я также хотел бы добавить некоторые дополнительные вкладки динамически. Поэтому я определил шаблон заголовка (используя 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>
Вы должны показать, что находится в 'AccentedMetroTabItemStyle' –
Чувак, удаление чего-то важного из вопроса не означает, что оно поможет решить вопрос. Скопируйте/вставьте этот отредактированный код в новое окно, тогда вы увидите, что проблемы больше нет. Поэтому я бы сказал, что ваша проблема все еще в этом стиле. –
Приношу свои извинения. Когда я ошибаюсь, я говорю, что я неправ. Будет ли повторное редактирование вопроса на мгновение. Просто нужно получить разрешение от некоторых сотрудников. –