Themes/MaterialDesignTheme.TabControl.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBlock.xaml" /> </ResourceDictionary.MergedDictionaries> <Style x:Key="FocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeDashArray="1 2" StrokeThickness="1" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignTabControlBase" TargetType="{x:Type TabControl}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" /> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="Padding" Value="0" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabControl}"> <DockPanel KeyboardNavigation.TabNavigation="Local"> <wpf:ColorZone x:Name="PART_HeaderZone" VerticalAlignment="Stretch" Panel.ZIndex="1" wpf:ElevationAssist.Elevation="{TemplateBinding wpf:ElevationAssist.Elevation}" Background="{TemplateBinding wpf:ColorZoneAssist.Background}" DockPanel.Dock="Top" Focusable="False"> <ScrollViewer wpf:ScrollViewerAssist.BubbleVerticalScroll="True" wpf:ScrollViewerAssist.SupportHorizontalScroll="True" wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}" wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> <StackPanel> <UniformGrid x:Name="CenteredHeaderPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{Binding Path=(wpf:TabAssist.HeaderPanelMargin), RelativeSource={RelativeSource TemplatedParent}}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" wpf:TabAssist.BindableIsItemsHost="{Binding Visibility, RelativeSource={RelativeSource Self}}" Focusable="False" KeyboardNavigation.TabIndex="1" Rows="1" /> <VirtualizingStackPanel x:Name="HeaderPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{Binding Path=(wpf:TabAssist.HeaderPanelMargin), RelativeSource={RelativeSource TemplatedParent}}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" wpf:TabAssist.BindableIsItemsHost="{Binding Visibility, RelativeSource={RelativeSource Self}}" Focusable="False" KeyboardNavigation.TabIndex="1" Orientation="Horizontal" /> </StackPanel> </ScrollViewer> </wpf:ColorZone> <Border x:Name="PART_BorderSelectedContent" Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Panel.ZIndex="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Panel.ZIndex)}" Background="{x:Null}" Focusable="False"> <ContentPresenter x:Name="PART_SelectedContentHost" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent" ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" ContentTemplate="{TemplateBinding SelectedContentTemplate}" ContentTemplateSelector="{TemplateBinding SelectedContentTemplateSelector}" Focusable="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Border> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="HorizontalContentAlignment" Value="Stretch"> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Visible" /> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Collapsed" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Center" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="False" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Visible" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Collapsed" /> </MultiTrigger.Setters> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Center" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="True" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Collapsed" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Visible" /> </MultiTrigger.Setters> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Left" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="False" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Visible" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Collapsed" /> </MultiTrigger.Setters> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Left" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="True" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Collapsed" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Visible" /> </MultiTrigger.Setters> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Right" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="False" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Visible" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Collapsed" /> </MultiTrigger.Setters> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HorizontalContentAlignment" Value="Right" /> <Condition Property="wpf:TabAssist.HasUniformTabWidth" Value="True" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter TargetName="HeaderPanel" Property="Visibility" Value="Collapsed" /> <Setter TargetName="CenteredHeaderPanel" Property="Visibility" Value="Visible" /> </MultiTrigger.Setters> </MultiTrigger> <Trigger Property="TabStripPlacement" Value="Bottom"> <Setter TargetName="PART_HeaderZone" Property="DockPanel.Dock" Value="Bottom" /> </Trigger> <Trigger Property="TabStripPlacement" Value="Left"> <Setter TargetName="CenteredHeaderPanel" Property="Columns" Value="1" /> <Setter TargetName="CenteredHeaderPanel" Property="Rows" Value="0" /> <Setter TargetName="PART_HeaderZone" Property="DockPanel.Dock" Value="Left" /> </Trigger> <Trigger Property="TabStripPlacement" Value="Right"> <Setter TargetName="CenteredHeaderPanel" Property="Columns" Value="1" /> <Setter TargetName="CenteredHeaderPanel" Property="Rows" Value="0" /> <Setter TargetName="PART_HeaderZone" Property="DockPanel.Dock" Value="Right" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Stretch" /> <Setter Property="wpf:ColorZoneAssist.Mode" Value="PrimaryMid" /> <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp4" /> <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Button.Ripple}" /> <Setter Property="wpf:TabAssist.HasUniformTabWidth" Value="False" /> </Style> <Style x:Key="MaterialDesignTabControl" TargetType="{x:Type TabControl}" BasedOn="{StaticResource MaterialDesignTabControlBase}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="wpf:ColorZoneAssist.Background" Value="Transparent" /> <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" /> <Setter Property="wpf:TabAssist.HasFilledTab" Value="False" /> </Style> <Style x:Key="MaterialDesignUniformTabControl" TargetType="{x:Type TabControl}" BasedOn="{StaticResource MaterialDesignTabControl}"> <Setter Property="wpf:TabAssist.HasUniformTabWidth" Value="True" /> </Style> <Style x:Key="MaterialDesignFilledTabControl" TargetType="{x:Type TabControl}" BasedOn="{StaticResource MaterialDesignTabControlBase}"> <Setter Property="wpf:TabAssist.HasFilledTab" Value="True" /> <Style.Triggers> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="Standard"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryMid"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryLight"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryDark"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryLight"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryMid"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryDark"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="Custom"> <Setter Property="wpf:ColorZoneAssist.Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Background)}" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" /> </Trigger> </Style.Triggers> </Style> <Style x:Key="MaterialDesignFilledUniformTabControl" TargetType="{x:Type TabControl}" BasedOn="{StaticResource MaterialDesignFilledTabControl}"> <Setter Property="wpf:TabAssist.HasUniformTabWidth" Value="True" /> </Style> <Style x:Key="MaterialDesignTabItem" TargetType="{x:Type TabItem}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" /> <!-- Foreground is for the content, not the header --> <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}}, Path=(TextElement.Foreground)}" /> <Setter Property="Height" Value="48" /> <Setter Property="MinWidth" Value="90" /> <Setter Property="Padding" Value="16,12" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabItem}"> <ControlTemplate.Resources> <Storyboard x:Key="SelectHorizontalTabItem"> <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleY" From="0" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleX" From="0" To="1" Duration="0:0:0.3"> <DoubleAnimation.EasingFunction> <SineEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> <DoubleAnimation BeginTime="0:0:0.3" Storyboard.TargetName="PART_BackgroundSelection" Storyboard.TargetProperty="Opacity" To="0.12" Duration="0" /> </Storyboard> <Storyboard x:Key="SelectVerticalTabItem"> <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleX" From="0" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleY" From="0" To="1" Duration="0:0:0.3"> <DoubleAnimation.EasingFunction> <SineEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> <DoubleAnimation BeginTime="0:0:0.3" Storyboard.TargetName="PART_BackgroundSelection" Storyboard.TargetProperty="Opacity" To="0.12" Duration="0" /> </Storyboard> </ControlTemplate.Resources> <Grid x:Name="Root"> <!-- This is the Header label ColorZone. --> <wpf:ColorZone x:Name="ColorZoneHeader" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" wpf:ColorZoneAssist.Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Background)}" wpf:ColorZoneAssist.Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" Focusable="False" Mode="Custom"> <wpf:Ripple x:Name="contentPresenter" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" Focusable="False" Opacity=".82" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" TextBlock.FontSize="14" TextBlock.FontWeight="Medium" TextOptions.TextFormattingMode="Ideal" TextOptions.TextRenderingMode="Auto" Typography.Capitals="{TemplateBinding Typography.Capitals}" /> </wpf:ColorZone> <Border x:Name="SelectionHighlightBorder" BorderBrush="{Binding Path=Foreground, ElementName=ColorZoneHeader}" BorderThickness="0,0,0,2" RenderTransformOrigin="0.5,0.5" Visibility="Hidden"> <Border.RenderTransform> <ScaleTransform x:Name="ScaleTransform" ScaleX="0" ScaleY="0" /> </Border.RenderTransform> <Rectangle x:Name="PART_BackgroundSelection" Fill="{TemplateBinding Background}" IsHitTestVisible="False" Opacity="0.0" /> </Border> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.38" /> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="SelectionHighlightBorder" Property="Visibility" Value="Visible" /> <Setter TargetName="contentPresenter" Property="Opacity" Value="1" /> <Setter TargetName="contentPresenter" Property="wpf:RippleAssist.IsDisabled" Value="True" /> </Trigger> <DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Bottom"> <Setter TargetName="SelectionHighlightBorder" Property="BorderThickness" Value="0,2,0,0" /> </DataTrigger> <DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Left"> <Setter TargetName="SelectionHighlightBorder" Property="BorderThickness" Value="0,0,2,0" /> </DataTrigger> <DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Right"> <Setter TargetName="SelectionHighlightBorder" Property="BorderThickness" Value="2,0,0,0" /> </DataTrigger> <!-- Selected TabItem animations (vary depending on TabControl.TabStripPlacement value) --> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource SelectHorizontalTabItem}" /> </MultiDataTrigger.EnterActions> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Bottom" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource SelectHorizontalTabItem}" /> </MultiDataTrigger.EnterActions> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Left" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource SelectVerticalTabItem}" /> </MultiDataTrigger.EnterActions> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Right" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource SelectVerticalTabItem}" /> </MultiDataTrigger.EnterActions> </MultiDataTrigger> <!-- Force the header foreground do be MaterialDesign.Brush.Foreground by default (only for not filled tabs) --> <Trigger Property="wpf:TabAssist.HasFilledTab" Value="False"> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </Trigger> <!-- The header foreground color change when focused (only for not filled tabs) --> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="Standard" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="PrimaryLight" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="PrimaryMid" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="PrimaryDark" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="SecondaryLight" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="SecondaryMid" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="SecondaryDark" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="wpf:TabAssist.HasFilledTab" Value="False" /> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="Custom" /> </MultiTrigger.Conditions> <Setter TargetName="ColorZoneHeader" Property="wpf:ColorZoneAssist.Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" /> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="wpf:ColorZoneAssist.Background" Value="Transparent" /> <Setter Property="wpf:ColorZoneAssist.Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}}, Path=(wpf:ColorZoneAssist.Foreground)}" /> <Setter Property="wpf:ColorZoneAssist.Mode" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}}, Path=(wpf:ColorZoneAssist.Mode)}" /> <Setter Property="wpf:DialogHost.RestoreFocusElement" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl}}" /> <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Button.Ripple}" /> <Setter Property="wpf:TabAssist.HasFilledTab" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}}, Path=(wpf:TabAssist.HasFilledTab)}" /> </Style> <!-- NAVIGATION RAIL --> <Style x:Key="MaterialDesignNavigationRailTabItem" TargetType="{x:Type TabItem}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="Height" Value="72" /> <Setter Property="Padding" Value="0" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabItem}"> <Grid x:Name="Root" Cursor="Hand"> <Grid> <Border x:Name="MouseOverBorder" Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(wpf:NavigationRailAssist.SelectionCornerRadius), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Opacity=".08" Visibility="Hidden" /> <wpf:ColorZone x:Name="colorZone" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" wpf:ColorZoneAssist.Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Background)}" wpf:ColorZoneAssist.Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" Background="{x:Null}" Cursor="Hand" Focusable="False" Mode="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Mode)}"> <wpf:Ripple x:Name="contentPresenter" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" ClipToBounds="True" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" Focusable="False" Opacity=".52" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" TextBlock.FontSize="15" TextBlock.FontWeight="Medium" TextOptions.TextFormattingMode="Ideal" TextOptions.TextRenderingMode="Auto"> <wpf:Ripple.Clip> <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}"> <Binding ElementName="MouseOverBorder" Path="ActualWidth" /> <Binding ElementName="MouseOverBorder" Path="ActualHeight" /> <Binding ElementName="MouseOverBorder" Path="CornerRadius" /> <Binding ElementName="MouseOverBorder" Path="BorderThickness" /> </MultiBinding> </wpf:Ripple.Clip> </wpf:Ripple> </wpf:ColorZone> </Grid> <Border x:Name="SelectionHighlightBorder" Visibility="Hidden"> <Border x:Name="PART_BackgroundSelection" Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(wpf:NavigationRailAssist.SelectionCornerRadius), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" IsHitTestVisible="False" Opacity="0.12" /> </Border> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.38" /> </Trigger> <Trigger SourceName="Root" Property="IsMouseOver" Value="True"> <Setter TargetName="MouseOverBorder" Property="Visibility" Value="Visible" /> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="contentPresenter" Property="Opacity" Value="1" /> <Setter TargetName="contentPresenter" Property="wpf:RippleAssist.IsDisabled" Value="True" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="True" /> <Condition Property="wpf:ColorZoneAssist.Mode" Value="Standard" /> </MultiTrigger.Conditions> <Setter TargetName="contentPresenter" Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </MultiTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True" /> <Condition Binding="{Binding Path=(wpf:NavigationRailAssist.ShowSelectionBackground), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="True" /> </MultiDataTrigger.Conditions> <Setter TargetName="SelectionHighlightBorder" Property="Visibility" Value="Visible" /> </MultiDataTrigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="Standard"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryMid"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryLight"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="PrimaryDark"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryLight"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryMid"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="SecondaryDark"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" /> <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="Custom"> <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" /> <Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="Width" Value="72" /> <Setter Property="wpf:DialogHost.RestoreFocusElement" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl}}" /> <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Button.Ripple}" /> </Style> <Style x:Key="MaterialDesignNavigationRailTabControl" TargetType="{x:Type TabControl}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" /> <Setter Property="BorderThickness" Value="0,0,1,0" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="ItemContainerStyle" Value="{StaticResource MaterialDesignNavigationRailTabItem}" /> <Setter Property="Padding" Value="0" /> <Setter Property="TabStripPlacement" Value="Left" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabControl}"> <DockPanel Background="{TemplateBinding Background}" KeyboardNavigation.TabNavigation="Local"> <!-- tabs --> <Grid x:Name="TabGrid" DockPanel.Dock="Left" SnapsToDevicePixels="True"> <wpf:Card x:Name="shadowCard" wpf:ElevationAssist.Elevation="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ElevationAssist.Elevation)}" Background="{TemplateBinding Background}" BorderBrush="{DynamicResource MaterialDesign.Brush.TabControl.Divider}" BorderThickness="{TemplateBinding BorderThickness}" UniformCornerRadius="0" Visibility="Visible" /> <wpf:ColorZone x:Name="PART_HeaderCard" VerticalAlignment="Stretch" wpf:ColorZoneAssist.Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Background)}" wpf:ColorZoneAssist.Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Foreground)}" Focusable="False" Mode="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ColorZoneAssist.Mode)}"> <Grid Background="{Binding ElementName=PART_HeaderCard, Path=Background}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <ContentPresenter x:Name="FloatingContentPanel" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:NavigationRailAssist.FloatingContent)}" Focusable="False" /> <UniformGrid x:Name="HeaderPanel" Grid.Row="1" Grid.Column="0" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Columns="1" Focusable="False" IsItemsHost="True" Rows="0" /> <Rectangle x:Name="DividerRect" Grid.RowSpan="2" Width="1" Height="Auto" HorizontalAlignment="Right" Fill="{DynamicResource MaterialDesign.Brush.TabControl.Divider}" Visibility="Collapsed" /> </Grid> </wpf:ColorZone> </Grid> <!-- selected content --> <wpf:ColorZone x:Name="PART_HeaderCardSelectedContent" Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{x:Null}" Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" Mode="Standard"> <ContentPresenter x:Name="PART_SelectedContentHost" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}" Focusable="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </wpf:ColorZone> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="wpf:ElevationAssist.Elevation" Value="Dp0"> <Setter TargetName="DividerRect" Property="Visibility" Value="Visible" /> <Setter TargetName="shadowCard" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="wpf:ColorZoneAssist.Mode" Value="Standard"> <Setter TargetName="PART_HeaderCard" Property="Background" Value="Transparent" /> </Trigger> <Trigger Property="TabStripPlacement" Value="Top"> <Setter Property="BorderThickness" Value="0,0,0,1" /> <Setter TargetName="DividerRect" Property="Grid.ColumnSpan" Value="2" /> <Setter TargetName="DividerRect" Property="Grid.RowSpan" Value="1" /> <Setter TargetName="DividerRect" Property="Height" Value="1" /> <Setter TargetName="DividerRect" Property="HorizontalAlignment" Value="Stretch" /> <Setter TargetName="DividerRect" Property="VerticalAlignment" Value="Bottom" /> <Setter TargetName="DividerRect" Property="Width" Value="Auto" /> <Setter TargetName="HeaderPanel" Property="Columns" Value="0" /> <Setter TargetName="HeaderPanel" Property="Grid.Column" Value="1" /> <Setter TargetName="HeaderPanel" Property="Grid.Row" Value="0" /> <Setter TargetName="HeaderPanel" Property="Rows" Value="1" /> <Setter TargetName="TabGrid" Property="DockPanel.Dock" Value="Top" /> </Trigger> <Trigger Property="TabStripPlacement" Value="Bottom"> <Setter Property="BorderThickness" Value="0,1,0,0" /> <Setter TargetName="DividerRect" Property="Grid.ColumnSpan" Value="2" /> <Setter TargetName="DividerRect" Property="Grid.RowSpan" Value="1" /> <Setter TargetName="DividerRect" Property="Height" Value="1" /> <Setter TargetName="DividerRect" Property="HorizontalAlignment" Value="Stretch" /> <Setter TargetName="DividerRect" Property="VerticalAlignment" Value="Top" /> <Setter TargetName="DividerRect" Property="Width" Value="Auto" /> <Setter TargetName="HeaderPanel" Property="Columns" Value="0" /> <Setter TargetName="HeaderPanel" Property="Grid.Column" Value="1" /> <Setter TargetName="HeaderPanel" Property="Grid.Row" Value="0" /> <Setter TargetName="HeaderPanel" Property="Rows" Value="1" /> <Setter TargetName="TabGrid" Property="DockPanel.Dock" Value="Bottom" /> </Trigger> <Trigger Property="TabStripPlacement" Value="Right"> <Setter Property="BorderThickness" Value="1,0,0,0" /> <Setter TargetName="DividerRect" Property="HorizontalAlignment" Value="Left" /> <Setter TargetName="TabGrid" Property="DockPanel.Dock" Value="Right" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" /> <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Button.Ripple}" /> </Style> </ResourceDictionary> |