Skip to content

Commit a604ccf

Browse files
Add TabAssist.UseHeaderPadding to enable/disable new behavior
The feature is on by default
1 parent 966c1e8 commit a604ccf

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

src/MaterialDesignThemes.Wpf/Behaviors/Internal/TabControlHeaderScrollBehavior.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ bool IsMovingForward()
9494

9595
private void AddPaddingToScrollableContentIfWiderThanViewPort()
9696
{
97+
if (TabAssist.GetUseHeaderPadding(TabControl) == false)
98+
return;
9799
if (ScrollableContent is null)
98100
return;
99101

@@ -128,6 +130,8 @@ protected override void OnDetaching()
128130

129131
private void AssociatedObject_ScrollChanged(object sender, ScrollChangedEventArgs e)
130132
{
133+
if (TabAssist.GetUseHeaderPadding(TabControl) == false)
134+
return;
131135
TimeSpan duration = TabAssist.GetScrollDuration(TabControl);
132136
if (duration == TimeSpan.Zero)
133137
return;

src/MaterialDesignThemes.Wpf/Internal/PaddedBringIntoViewStackPanel.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,23 @@ public double HeaderPadding
2525
DependencyProperty.Register(nameof(HeaderPadding),
2626
typeof(double), typeof(PaddedBringIntoViewStackPanel), new PropertyMetadata(0d));
2727

28+
public bool UseHeaderPadding
29+
{
30+
get => (bool)GetValue(UseHeaderPaddingProperty);
31+
set => SetValue(UseHeaderPaddingProperty, value);
32+
}
33+
34+
public static readonly DependencyProperty UseHeaderPaddingProperty =
35+
DependencyProperty.Register(nameof(UseHeaderPadding), typeof(bool), typeof(PaddedBringIntoViewStackPanel), new PropertyMetadata(false));
36+
2837
public PaddedBringIntoViewStackPanel()
2938
=> AddHandler(FrameworkElement.RequestBringIntoViewEvent, new RoutedEventHandler(OnRequestBringIntoView), false);
3039

3140
private void OnRequestBringIntoView(object sender, RoutedEventArgs e)
3241
{
42+
if (!UseHeaderPadding)
43+
return;
44+
3345
if (e.OriginalSource is FrameworkElement child && child != this)
3446
{
3547
e.Handled = true;

src/MaterialDesignThemes.Wpf/TabAssist.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ public static void SetHeaderBehavior(DependencyObject obj, TabControlHeaderBehav
7373
public static double GetHeaderPadding(DependencyObject obj)
7474
=> (double)obj.GetValue(HeaderPaddingProperty);
7575

76+
public static bool GetUseHeaderPadding(DependencyObject obj)
77+
=> (bool)obj.GetValue(UseHeaderPaddingProperty);
78+
79+
public static void SetUseHeaderPadding(DependencyObject obj, bool value)
80+
=> obj.SetValue(UseHeaderPaddingProperty, value);
81+
82+
public static readonly DependencyProperty UseHeaderPaddingProperty =
83+
DependencyProperty.RegisterAttached("UseHeaderPadding", typeof(bool), typeof(TabAssist), new PropertyMetadata(false));
84+
7685
public static void SetHeaderPadding(DependencyObject obj, double value)
7786
=> obj.SetValue(HeaderPaddingProperty, value);
7887

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TabControl.xaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
</b:Interaction.Behaviors>
4545
<internal:PaddedBringIntoViewStackPanel x:Name="ScrollableContent"
4646
ScrollDirection="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(behaviorsInternal:TabControlHeaderScrollBehavior.ScrollDirection)}"
47-
HeaderPadding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.HeaderPadding)}">
47+
HeaderPadding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.HeaderPadding)}"
48+
UseHeaderPadding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TabAssist.UseHeaderPadding)}">
4849
<UniformGrid x:Name="CenteredHeaderPanel"
4950
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
5051
Margin="{Binding Path=(wpf:TabAssist.HeaderPanelMargin), RelativeSource={RelativeSource TemplatedParent}}"
@@ -237,6 +238,7 @@
237238
<Setter Property="wpf:TabAssist.HasUniformTabWidth" Value="False" />
238239
<!-- MD spec says 52 DP, but that seems a little excessive in practice -->
239240
<Setter Property="wpf:TabAssist.HeaderPadding" Value="40" />
241+
<Setter Property="wpf:TabAssist.UseHeaderPadding" Value="True" />
240242
<Setter Property="wpf:TabAssist.ScrollDuration" Value="0:0:0.250" />
241243

242244
<Style.Triggers>

0 commit comments

Comments
 (0)