Skip to content

Instantly share code, notes, and snippets.

@Kinnara
Last active March 19, 2020 13:28
Show Gist options
  • Save Kinnara/b8a1b7e5bd5d268c029c9c5aac0718a7 to your computer and use it in GitHub Desktop.
Save Kinnara/b8a1b7e5bd5d268c029c9c5aac0718a7 to your computer and use it in GitHub Desktop.
CrossFadeTabControlStyle
<Style x:Key="CrossFadeTabControlStyle"
TargetType="{x:Type TabControl}"
BasedOn="{StaticResource DefaultTabControlStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid
x:Name="templateRoot"
ClipToBounds="true"
KeyboardNavigation.TabNavigation="Local"
SnapsToDevicePixels="true">
<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>
<DockPanel
x:Name="headerPanel"
ClipToBounds="True"
Panel.ZIndex="1"
Grid.Row="0"
Grid.Column="0"
Background="{TemplateBinding Background}">
<ContentPresenter
DockPanel.Dock="Left"
x:Name="HeaderContentPresenter"
Content="{TemplateBinding ui:TabControlHelper.TabStripHeader}"
ContentTemplate="{TemplateBinding ui:TabControlHelper.TabStripHeaderTemplate}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<TabPanel
DockPanel.Dock="Left"
x:Name="TabPanel"
Background="Transparent"
Margin="{DynamicResource TabViewTopHeaderPadding}"
IsItemsHost="true" />
<ContentPresenter
DockPanel.Dock="Right"
x:Name="FooterContentPresenter"
HorizontalAlignment="Stretch"
Content="{TemplateBinding ui:TabControlHelper.TabStripFooter}"
ContentTemplate="{TemplateBinding ui:TabControlHelper.TabStripFooterTemplate}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</DockPanel>
<Border
x:Name="contentPanel"
Grid.Row="1"
Grid.Column="0"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
KeyboardNavigation.DirectionalNavigation="Contained"
KeyboardNavigation.TabNavigation="Local">
<sc:CrossFadeContentControl
x:Name="PART_SelectedContentHost"
Focusable="False"
Margin="{TemplateBinding Padding}"
Content="{TemplateBinding SelectedContent}"
ContentStringFormat="{TemplateBinding SelectedContentStringFormat}"
ContentTemplate="{TemplateBinding SelectedContentTemplate}"
ContentTemplateSelector="{TemplateBinding SelectedContentTemplateSelector}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="TabStripPlacement" Value="Top">
<Setter TargetName="TabPanel" Property="VerticalAlignment" Value="Bottom" />
</Trigger>
<Trigger Property="TabStripPlacement" Value="Bottom">
<Setter TargetName="headerPanel" Property="Grid.Row" Value="1" />
<Setter TargetName="contentPanel" Property="Grid.Row" Value="0" />
<Setter TargetName="RowDefinition0" Property="Height" Value="*" />
<Setter TargetName="RowDefinition1" Property="Height" Value="Auto" />
<Setter TargetName="TabPanel" Property="VerticalAlignment" Value="Top" />
<Setter TargetName="TabPanel" Property="Margin" Value="{DynamicResource TabViewBottomHeaderPadding}" />
</Trigger>
<Trigger Property="TabStripPlacement" Value="Left">
<Setter TargetName="headerPanel" Property="Grid.Row" Value="0" />
<Setter TargetName="contentPanel" Property="Grid.Row" Value="0" />
<Setter TargetName="headerPanel" Property="Grid.Column" Value="0" />
<Setter TargetName="contentPanel" Property="Grid.Column" Value="1" />
<Setter TargetName="ColumnDefinition0" Property="Width" Value="Auto" />
<Setter TargetName="ColumnDefinition1" Property="Width" Value="*" />
<Setter TargetName="RowDefinition0" Property="Height" Value="*" />
<Setter TargetName="RowDefinition1" Property="Height" Value="0" />
<Setter TargetName="HeaderContentPresenter" Property="DockPanel.Dock" Value="Top" />
<Setter TargetName="TabPanel" Property="DockPanel.Dock" Value="Top" />
<Setter TargetName="TabPanel" Property="HorizontalAlignment" Value="Right" />
<Setter TargetName="TabPanel" Property="Margin" Value="{DynamicResource TabViewLeftHeaderPadding}" />
<Setter TargetName="FooterContentPresenter" Property="DockPanel.Dock" Value="Bottom" />
</Trigger>
<Trigger Property="TabStripPlacement" Value="Right">
<Setter TargetName="headerPanel" Property="Grid.Row" Value="0" />
<Setter TargetName="contentPanel" Property="Grid.Row" Value="0" />
<Setter TargetName="headerPanel" Property="Grid.Column" Value="1" />
<Setter TargetName="contentPanel" Property="Grid.Column" Value="0" />
<Setter TargetName="ColumnDefinition0" Property="Width" Value="*" />
<Setter TargetName="ColumnDefinition1" Property="Width" Value="Auto" />
<Setter TargetName="RowDefinition0" Property="Height" Value="*" />
<Setter TargetName="RowDefinition1" Property="Height" Value="0" />
<Setter TargetName="HeaderContentPresenter" Property="DockPanel.Dock" Value="Top" />
<Setter TargetName="TabPanel" Property="DockPanel.Dock" Value="Top" />
<Setter TargetName="TabPanel" Property="HorizontalAlignment" Value="Left" />
<Setter TargetName="TabPanel" Property="Margin" Value="{DynamicResource TabViewRightHeaderPadding}" />
<Setter TargetName="FooterContentPresenter" Property="DockPanel.Dock" Value="Bottom" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment