Skip to content

Commit c87d8f8

Browse files
authored
Fix: Hides GridView header if no columns present (#3979) (#3980)
Adds an internal converter to check for GridView columns and a trigger to collapse the header ScrollViewer when no columns are defined.
1 parent 3e44dae commit c87d8f8

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Globalization;
2+
using System.Windows.Data;
3+
4+
namespace MaterialDesignThemes.Wpf.Converters.Internal;
5+
6+
internal class GridViewHasColumnsConverter : IValueConverter
7+
{
8+
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
9+
{
10+
// Returns true if value is a GridView with at least one column
11+
return value is GridView gridView && gridView.Columns.Count > 0;
12+
}
13+
14+
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
15+
{
16+
throw new NotSupportedException();
17+
}
18+
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
4+
xmlns:internalConverters="clr-namespace:MaterialDesignThemes.Wpf.Converters.Internal"
45
xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
56

67
<ResourceDictionary.MergedDictionaries>
@@ -9,11 +10,15 @@
910
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Thumb.xaml" />
1011
</ResourceDictionary.MergedDictionaries>
1112

13+
1214
<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}">
1315
<Setter Property="CanContentScroll" Value="True" />
1416
<Setter Property="Template">
1517
<Setter.Value>
1618
<ControlTemplate TargetType="{x:Type ScrollViewer}">
19+
<ControlTemplate.Resources>
20+
<internalConverters:GridViewHasColumnsConverter x:Key="GridViewHasColumnsConverter" />
21+
</ControlTemplate.Resources>
1722
<Grid Background="{TemplateBinding Background}">
1823
<Grid.ColumnDefinitions>
1924
<ColumnDefinition Width="*" />
@@ -25,7 +30,8 @@
2530
</Grid.RowDefinitions>
2631

2732
<DockPanel Margin="{TemplateBinding Padding}">
28-
<ScrollViewer wpf:ScrollViewerAssist.SyncHorizontalOffset="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
33+
<ScrollViewer x:Name="PART_HeaderScrollViewer"
34+
wpf:ScrollViewerAssist.SyncHorizontalOffset="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
2935
wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}"
3036
wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}"
3137
DockPanel.Dock="Top"
@@ -75,6 +81,11 @@
7581
Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
7682

7783
</Grid>
84+
<ControlTemplate.Triggers>
85+
<DataTrigger Binding="{Binding Path=TemplatedParent.View, RelativeSource={RelativeSource Self}, Converter={StaticResource GridViewHasColumnsConverter}}" Value="False">
86+
<Setter TargetName="PART_HeaderScrollViewer" Property="Visibility" Value="Collapsed" />
87+
</DataTrigger>
88+
</ControlTemplate.Triggers>
7889
</ControlTemplate>
7990
</Setter.Value>
8091
</Setter>

0 commit comments

Comments
 (0)