Open leMicin opened 4 years ago
Currently, when we try to put TabStripPlacement="Left", the result is very off.
It would be awesome if Adonis could handle other TabStripPlacement than "Top".
We currently have put a patch in place in our project to detect the TabStripPlacement. Here is the bit of code that we have put in place:
<Style x:Key="{x:Type TabControl}" BasedOn="{StaticResource {x:Type TabControl}}" TargetType="TabControl"> <Style.Triggers> <Trigger Property="TabStripPlacement" Value="Left"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabControl}"> <Grid KeyboardNavigation.TabNavigation="Local"> <Grid.ColumnDefinitions> <ColumnDefinition Width="150" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <TabPanel x:Name="HeaderPanel" Grid.Column="0" Panel.ZIndex="1" Background="Transparent" IsItemsHost="True" KeyboardNavigation.TabIndex="1" /> <Border x:Name="Border" Grid.Column="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"> <Border.CornerRadius> <MultiBinding Converter="{x:Static adonisConverters:ValuesToCornerRadiusConverter.Instance}"> <Binding Source="0" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).TopRight" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).BottomRight" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).BottomLeft" RelativeSource="{RelativeSource TemplatedParent}" /> </MultiBinding> </Border.CornerRadius> <ContentPresenter x:Name="PART_SelectedContentHost" Margin="{adonisUi:Space 1, 1, 1, 1}" ContentSource="SelectedContent" /> </Border> <Border x:Name="SelectedItemHighlight" Grid.Column="1" Width="4" Margin="{TemplateBinding BorderThickness}" HorizontalAlignment="Left" VerticalAlignment="Top" Background="{DynamicResource {x:Static adonisUi:Brushes.Layer1HighlightBrush}}"> <Border.CornerRadius> <MultiBinding Converter="{x:Static adonisConverters:ValuesToCornerRadiusConverter.Instance}"> <Binding Source="0" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).TopRight" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> <Binding Source="0" /> </MultiBinding> </Border.CornerRadius> </Border> </Grid> <ControlTemplate.Triggers> <DataTrigger Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="2"> <Setter TargetName="SelectedItemHighlight" Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer2HighlightBrush}}" /> </DataTrigger> <DataTrigger Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="3"> <Setter TargetName="SelectedItemHighlight" Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer3HighlightBrush}}" /> </DataTrigger> <DataTrigger Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="4"> <Setter TargetName="SelectedItemHighlight" Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer4HighlightBrush}}" /> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> <Style x:Key="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}" TargetType="TabItem"> <Setter Property="Padding" Value="8" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=TabStripPlacement}" Value="Left"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem"> <Grid x:Name="OuterGrid" Height="30"> <Border x:Name="Border" Padding="4" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"> <Border.BorderThickness> <MultiBinding Converter="{x:Static adonisConverters:ValuesToThicknessConverter.Instance}"> <Binding Path="BorderThickness.Left" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="BorderThickness.Top" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> <Binding Path="BorderThickness.Bottom" RelativeSource="{RelativeSource TemplatedParent}" /> </MultiBinding> </Border.BorderThickness> <Border.CornerRadius> <MultiBinding Converter="{x:Static adonisConverters:ValuesToCornerRadiusConverter.Instance}"> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).TopLeft" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).BottomLeft" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> </MultiBinding> </Border.CornerRadius> </Border> <Border x:Name="SpotlightLayer" adonisExtensions:CursorSpotlightExtension.MouseEventSource="{Binding RelativeSource={RelativeSource TemplatedParent}}" Background="{TemplateBinding adonisExtensions:CursorSpotlightExtension.BackgroundBrush}" BorderBrush="{TemplateBinding adonisExtensions:CursorSpotlightExtension.BorderBrush}"> <Border.BorderThickness> <MultiBinding Converter="{x:Static adonisConverters:ValuesToThicknessConverter.Instance}"> <Binding Path="BorderThickness.Left" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="BorderThickness.Top" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> <Binding Path="BorderThickness.Bottom" RelativeSource="{RelativeSource TemplatedParent}" /> </MultiBinding> </Border.BorderThickness> <Border.CornerRadius> <MultiBinding Converter="{x:Static adonisConverters:ValuesToCornerRadiusConverter.Instance}"> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).TopLeft" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> <Binding Path="(adonisExtensions:CornerRadiusExtension.CornerRadius).BottomLeft" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Source="0" /> </MultiBinding> </Border.CornerRadius> </Border> <Grid Name="TabPanel" Background="Transparent"> <ContentPresenter x:Name="ContentSite" Margin="8,4" HorizontalAlignment="Center" VerticalAlignment="Center" ContentSource="Header" RecognizesAccessKey="True" /> </Grid> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="OuterGrid" Property="Margin" Value="0,0,-1,0" /> </Trigger> <Trigger Property="IsSelected" Value="False"> <Setter TargetName="OuterGrid" Property="Margin" Value="4,0,0,0" /> </Trigger> <Trigger SourceName="TabPanel" Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer1HighlightBrush}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer1HighlightBorderBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BackgroundBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer1IntenseHighlightBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer1IntenseHighlightBorderBrush}}" /> </Trigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="2" /> <Condition Binding="{Binding IsMouseOver, ElementName=TabPanel}" Value="True" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer2HighlightBrush}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer2HighlightBorderBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BackgroundBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer2IntenseHighlightBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer2IntenseHighlightBorderBrush}}" /> </MultiDataTrigger.Setters> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="3" /> <Condition Binding="{Binding IsMouseOver, ElementName=TabPanel}" Value="True" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer3HighlightBrush}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer3HighlightBorderBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BackgroundBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer3IntenseHighlightBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer3IntenseHighlightBorderBrush}}" /> </MultiDataTrigger.Setters> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=(adonisExtensions:LayerExtension.ComputedLayer), RelativeSource={RelativeSource Self}}" Value="4" /> <Condition Binding="{Binding IsMouseOver, ElementName=TabPanel}" Value="True" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Background" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer4HighlightBrush}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer4HighlightBorderBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BackgroundBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer4IntenseHighlightBrush}}" /> <Setter Property="adonisExtensions:CursorSpotlightExtension.BorderBrush" Value="{DynamicResource {x:Static adonisUi:Brushes.Layer4IntenseHighlightBorderBrush}}" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style>
You're right, this should be supported. Putting it on the to do list.
Problem
Currently, when we try to put TabStripPlacement="Left", the result is very off.
Solution
It would be awesome if Adonis could handle other TabStripPlacement than "Top".
Alternative
We currently have put a patch in place in our project to detect the TabStripPlacement. Here is the bit of code that we have put in place: