Skip to content

Commit e4a3966

Browse files
authored
ScrollViewer-Padding Fixed (#3579)
* ScrollViewer-Padding Fixed (Removed ScrollViewerAssist.IgnorePadding) * Reintroduced ScrollViewerAssist.IgnorePadding * By default set ScrollViewerAssist.IgnorePadding to false * Introduced ScrollViewerAssist.PaddingMode
1 parent 572eccc commit e4a3966

File tree

4 files changed

+65
-12
lines changed

4 files changed

+65
-12
lines changed

src/MainDemo.Wpf/GroupBoxes.xaml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,23 +101,31 @@
101101

102102
<WrapPanel>
103103
<smtx:XamlDisplay UniqueKey="groupbox_7">
104-
<GroupBox Width="300" Height="100" Header="Header"
104+
<GroupBox Width="300" Height="120" Header="Header"
105105
materialDesign:GroupBoxAssist.HeaderPadding="4" Padding="0"
106106
Style="{StaticResource MaterialDesignGroupBox}">
107-
<ScrollViewer>
108-
<TextBlock Margin="8" TextWrapping="Wrap"
109-
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
107+
<ScrollViewer Padding="4" materialDesign:ScrollViewerAssist.PaddingMode="Default">
108+
<StackPanel>
109+
<TextBlock Margin="4" TextWrapping="Wrap"
110+
Text="ScrollViewerAssist.PaddingMode on Default lets the ScrollViewer add padding in the default (WPF) way. This causes content to be cut off with the padding in the container as a border when scrolled." />
111+
<TextBlock Margin="4" TextWrapping="Wrap"
112+
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
113+
</StackPanel>
110114
</ScrollViewer>
111115
</GroupBox>
112116
</smtx:XamlDisplay>
113117

114118
<smtx:XamlDisplay UniqueKey="groupbox_8">
115-
<GroupBox Width="300" Height="100" Header="Header"
119+
<GroupBox Width="300" Height="120" Header="Header"
116120
materialDesign:GroupBoxAssist.HeaderPadding="4" Padding="0"
117121
Style="{StaticResource MaterialDesignCardGroupBox}">
118-
<ScrollViewer>
119-
<TextBlock Margin="8" TextWrapping="Wrap"
120-
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
122+
<ScrollViewer Padding="4" materialDesign:ScrollViewerAssist.PaddingMode="Content">
123+
<StackPanel>
124+
<TextBlock Margin="4" TextWrapping="Wrap"
125+
Text="ScrollViewerAssist.PaddingMode on Content lets the ScrollViewer add padding around the content itself. This causes content to be cut off at the edge of the container when scrolled." />
126+
<TextBlock Margin="4" TextWrapping="Wrap"
127+
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
128+
</StackPanel>
121129
</ScrollViewer>
122130
</GroupBox>
123131
</smtx:XamlDisplay>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace MaterialDesignThemes.Wpf;
2+
3+
public enum PaddingMode
4+
{
5+
Default,
6+
Content,
7+
}

src/MaterialDesignThemes.Wpf/ScrollViewerAssist.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,21 @@ public static bool GetShowSeparators(DependencyObject element)
6262
return (bool)element.GetValue(ShowSeparatorsProperty);
6363
}
6464

65+
public static readonly DependencyProperty PaddingModeProperty = DependencyProperty.RegisterAttached(
66+
"PaddingMode", typeof(PaddingMode), typeof(ScrollViewerAssist), new PropertyMetadata(PaddingMode.Content));
67+
68+
public static void SetPaddingMode(DependencyObject element, PaddingMode value)
69+
{
70+
element.SetValue(PaddingModeProperty, value);
71+
}
72+
73+
public static PaddingMode GetPaddingMode(DependencyObject element)
74+
{
75+
return (PaddingMode)element.GetValue(PaddingModeProperty);
76+
}
77+
6578
public static readonly DependencyProperty IgnorePaddingProperty = DependencyProperty.RegisterAttached(
66-
"IgnorePadding", typeof(bool), typeof(ScrollViewerAssist), new PropertyMetadata(true));
79+
"IgnorePadding", typeof(bool), typeof(ScrollViewerAssist), new PropertyMetadata(false));
6780

6881
public static void SetIgnorePadding(DependencyObject element, bool value) => element.SetValue(IgnorePaddingProperty, value);
6982
public static bool GetIgnorePadding(DependencyObject element) => (bool)element.GetValue(IgnorePaddingProperty);

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,15 @@
8686
<Setter TargetName="PART_TopSeparator" Property="Visibility" Value="Hidden" />
8787
</Trigger>
8888

89-
<Trigger Property="wpf:ScrollViewerAssist.IgnorePadding" Value="False">
90-
<Setter TargetName="PART_ScrollContentPresenter" Property="Margin" Value="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" />
91-
</Trigger>
89+
<MultiTrigger>
90+
<MultiTrigger.Conditions>
91+
<Condition Property="wpf:ScrollViewerAssist.IgnorePadding" Value="False" />
92+
<Condition Property="wpf:ScrollViewerAssist.PaddingMode" Value="Default" />
93+
</MultiTrigger.Conditions>
94+
<MultiTrigger.Setters>
95+
<Setter TargetName="PART_ScrollContentPresenter" Property="Margin" Value="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" />
96+
</MultiTrigger.Setters>
97+
</MultiTrigger>
9298

9399
<MultiTrigger>
94100
<MultiTrigger.Conditions>
@@ -150,5 +156,24 @@
150156

151157
<Style x:Key="MaterialDesignScrollViewer" TargetType="ScrollViewer">
152158
<Setter Property="Template" Value="{StaticResource MaterialDesignScrollViewerTemplate}" />
159+
<Style.Triggers>
160+
<MultiTrigger>
161+
<MultiTrigger.Conditions>
162+
<Condition Property="wpf:ScrollViewerAssist.IgnorePadding" Value="False" />
163+
<Condition Property="wpf:ScrollViewerAssist.PaddingMode" Value="Content" />
164+
</MultiTrigger.Conditions>
165+
<MultiTrigger.Setters>
166+
<Setter Property="ContentTemplate">
167+
<Setter.Value>
168+
<DataTemplate>
169+
<ContentControl Margin="{Binding Padding, RelativeSource={RelativeSource AncestorType=ScrollViewer}}">
170+
<ContentPresenter Content="{Binding}" />
171+
</ContentControl>
172+
</DataTemplate>
173+
</Setter.Value>
174+
</Setter>
175+
</MultiTrigger.Setters>
176+
</MultiTrigger>
177+
</Style.Triggers>
153178
</Style>
154179
</ResourceDictionary>

0 commit comments

Comments
 (0)