|
27 | 27 |
|
28 | 28 | <ControlTemplate x:Key="ScrollingTabControlTemplate" TargetType="{x:Type TabControl}"> |
29 | 29 | <ControlTemplate.Resources> |
30 | | - <convertersInternal:TabControlNavButtonPanelMarginConverter x:Key="TabControlNavButtonPanelMarginConverter" /> |
| 30 | + <convertersInternal:TabControlAdditionalHeaderPanelContentMarginConverter x:Key="TabControlAdditionalHeaderPanelContentMarginConverter" /> |
31 | 31 | <convertersInternal:TabControlNavButtonPanelVisibilityConverter x:Key="TabControlNavButtonPanelVisibilityConverter" /> |
| 32 | + <convertersInternal:TabControlNavButtonVisibilityConverter x:Key="LeftPreviousTabControlNavButtonVisibilityConverter" VisiblePlacements="Split, Left" /> |
| 33 | + <convertersInternal:TabControlNavButtonVisibilityConverter x:Key="LeftNextTabControlNavButtonVisibilityConverter" VisiblePlacements="Left" /> |
| 34 | + <convertersInternal:TabControlNavButtonVisibilityConverter x:Key="RightPreviousTabControlNavButtonVisibilityConverter" VisiblePlacements="Right" /> |
| 35 | + <convertersInternal:TabControlNavButtonVisibilityConverter x:Key="RightNextTabControlNavButtonVisibilityConverter" VisiblePlacements="Split, Right" /> |
| 36 | + <convertersInternal:TabControlNavButtonPanelMarginConverter x:Key="TabControlNavButtonPanelMarginConverter" /> |
32 | 37 | </ControlTemplate.Resources> |
33 | 38 | <DockPanel KeyboardNavigation.TabNavigation="Local"> |
34 | 39 | <wpf:ColorZone x:Name="PART_HeaderZone" |
|
49 | 54 | <behaviorsInternal:TabControlHeaderScrollBehavior x:Name="TabControlHeaderScrollBehavior" |
50 | 55 | TabControl="{Binding RelativeSource={RelativeSource TemplatedParent}}" |
51 | 56 | ScrollableContent="{Binding ElementName=ScrollableContent}" |
52 | | - AdditionalHeaderPanelContentWidth="{Binding ElementName=AdditionalHeaderPanelContent, Path=ActualWidth}"/> |
| 57 | + AdditionalHeaderPanelContentWidth="{Binding ElementName=AdditionalHeaderPanelContent, Path=ActualWidth}" |
| 58 | + NavigationPanelLeftWidth="{Binding ElementName=NavigationPanelLeft, Path=ActualWidth}"/> |
53 | 59 | </b:Interaction.Behaviors> |
54 | 60 | <internal:PaddedBringIntoViewStackPanel x:Name="ScrollableContent" |
55 | 61 | ScrollDirection="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(behaviorsInternal:TabControlHeaderScrollBehavior.ScrollDirection)}" |
|
73 | 79 | Orientation="Horizontal" /> |
74 | 80 | </internal:PaddedBringIntoViewStackPanel> |
75 | 81 | </ScrollViewer> |
76 | | - |
| 82 | + |
77 | 83 | <StackPanel x:Name="AdditionalHeaderPanelContent" Orientation="Horizontal" HorizontalAlignment="Left"> |
78 | 84 | <StackPanel.Margin> |
79 | | - <MultiBinding Converter="{StaticResource TabControlNavButtonPanelMarginConverter}"> |
| 85 | + <MultiBinding Converter="{StaticResource TabControlAdditionalHeaderPanelContentMarginConverter}"> |
80 | 86 | <Binding ElementName="CenteredHeaderPanel" Path="ActualWidth" /> |
81 | 87 | <Binding ElementName="HeaderPanel" Path="ActualWidth" /> |
82 | 88 | <Binding ElementName="PART_HeaderZone" Path="ActualWidth" /> |
|
86 | 92 | </MultiBinding> |
87 | 93 | </StackPanel.Margin> |
88 | 94 |
|
89 | | - <!-- Navigation panel --> |
90 | | - <StackPanel x:Name="NavigationPanel" Orientation="Horizontal" Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.NavigationPanelMargin)}"> |
| 95 | + <!-- Navigation panel (right) --> |
| 96 | + <StackPanel x:Name="NavigationPanelRight" Orientation="Horizontal"> |
| 97 | + <StackPanel.Margin> |
| 98 | + <MultiBinding Converter="{StaticResource TabControlNavButtonPanelMarginConverter}"> |
| 99 | + <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.NavigationPanelMargin)" /> |
| 100 | + <Binding ElementName="RightPreviousButton" Path="Visibility" /> |
| 101 | + <Binding ElementName="RightNextButton" Path="Visibility" /> |
| 102 | + </MultiBinding> |
| 103 | + </StackPanel.Margin> |
91 | 104 | <StackPanel.Visibility> |
92 | 105 | <MultiBinding Converter="{StaticResource TabControlNavButtonPanelVisibilityConverter}"> |
93 | 106 | <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.UseNavigationPanel)" /> |
94 | 107 | <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.IsOverflowing)" /> |
95 | 108 | </MultiBinding> |
96 | 109 | </StackPanel.Visibility> |
97 | | - <Button Width="16" |
| 110 | + <Button x:Name="RightPreviousButton" |
| 111 | + Width="16" |
98 | 112 | Height="16" |
99 | 113 | Padding="0" |
100 | | - Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=PreviousTabCommand}"> |
| 114 | + Margin="0,0,8,0" |
| 115 | + Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=PreviousTabCommand}" |
| 116 | + Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.NavigationPanelPlacement), Converter={StaticResource RightPreviousTabControlNavButtonVisibilityConverter}}"> |
101 | 117 | <wpf:PackIcon Kind="ChevronLeft" Width="12" Height="12" /> |
102 | 118 | </Button> |
103 | | - <Button Width="16" |
| 119 | + <Button x:Name="RightNextButton" |
| 120 | + Width="16" |
104 | 121 | Height="16" |
105 | 122 | Padding="0" |
106 | | - Margin="8,0,0,0" |
107 | | - Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=NextTabCommand}"> |
| 123 | + Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=NextTabCommand}" |
| 124 | + Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.NavigationPanelPlacement), Converter={StaticResource RightNextTabControlNavButtonVisibilityConverter}}"> |
108 | 125 | <wpf:PackIcon Kind="ChevronRight" Width="12" Height="12" /> |
109 | 126 | </Button> |
110 | 127 | </StackPanel> |
111 | 128 |
|
112 | 129 | <!-- Custom content --> |
113 | 130 | <ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.HeaderPanelCustomContent)}" /> |
114 | | - |
115 | 131 | </StackPanel> |
| 132 | + |
| 133 | + <!-- Navigation panel (left) - for some reason the extra Grid is needed to trigger updates to NavigationPanelLeft.ActualWidth in the binding above --> |
| 134 | + <Grid x:Name="NavigationPanelLeft" HorizontalAlignment="Left"> |
| 135 | + <StackPanel Orientation="Horizontal"> |
| 136 | + <StackPanel.Margin> |
| 137 | + <MultiBinding Converter="{StaticResource TabControlNavButtonPanelMarginConverter}"> |
| 138 | + <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.NavigationPanelMargin)" /> |
| 139 | + <Binding ElementName="LeftPreviousButton" Path="Visibility" /> |
| 140 | + <Binding ElementName="LeftNextButton" Path="Visibility" /> |
| 141 | + </MultiBinding> |
| 142 | + </StackPanel.Margin> |
| 143 | + <StackPanel.Visibility> |
| 144 | + <MultiBinding Converter="{StaticResource TabControlNavButtonPanelVisibilityConverter}"> |
| 145 | + <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.UseNavigationPanel)" /> |
| 146 | + <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TabAssist.IsOverflowing)" /> |
| 147 | + </MultiBinding> |
| 148 | + </StackPanel.Visibility> |
| 149 | + <Button x:Name="LeftPreviousButton" |
| 150 | + Width="16" |
| 151 | + Height="16" |
| 152 | + Padding="0" |
| 153 | + Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=PreviousTabCommand}" |
| 154 | + Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.NavigationPanelPlacement), Converter={StaticResource LeftPreviousTabControlNavButtonVisibilityConverter}}"> |
| 155 | + <wpf:PackIcon Kind="ChevronLeft" Width="12" Height="12" /> |
| 156 | + </Button> |
| 157 | + <Button x:Name="LeftNextButton" |
| 158 | + Width="16" |
| 159 | + Height="16" |
| 160 | + Padding="0" |
| 161 | + Margin="8,0,0,0" |
| 162 | + Command="{Binding ElementName=TabControlHeaderScrollBehavior, Path=NextTabCommand}" |
| 163 | + Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.NavigationPanelPlacement), Converter={StaticResource LeftNextTabControlNavButtonVisibilityConverter}}"> |
| 164 | + <wpf:PackIcon Kind="ChevronRight" Width="12" Height="12" /> |
| 165 | + </Button> |
| 166 | + </StackPanel> |
| 167 | + </Grid> |
116 | 168 | </Grid> |
117 | 169 | </wpf:ColorZone> |
118 | 170 |
|
|
0 commit comments