diff --git a/samples/ControlCatalog/Pages/DataGridPage.xaml b/samples/ControlCatalog/Pages/DataGridPage.xaml
index fb097da71b..12574d4e48 100644
--- a/samples/ControlCatalog/Pages/DataGridPage.xaml
+++ b/samples/ControlCatalog/Pages/DataGridPage.xaml
@@ -12,9 +12,9 @@
-
-
-
+
+
+
@@ -39,29 +39,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -74,20 +73,20 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
index 6556ce721e..57d6c1bad9 100644
--- a/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
+++ b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
@@ -21,4 +21,19 @@
+
+
+
+ DataGridRowHeaderTheme.axaml
+ Code
+
+
+ DataGridRowGroupExpanderButtonTheme.axaml
+ Code
+
+
+ DataGridRowGroupHeaderTheme.axaml
+ Code
+
+
diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs
index 7ade9f2437..dededc105b 100644
--- a/src/Avalonia.Controls.DataGrid/DataGrid.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs
@@ -25,6 +25,7 @@ using System.ComponentModel.DataAnnotations;
using Avalonia.Controls.Utils;
using Avalonia.Layout;
using Avalonia.Controls.Metadata;
+using Avalonia.Controls.Themes;
using Avalonia.Input.GestureRecognizers;
using Avalonia.Styling;
using Avalonia.Reactive;
@@ -1405,6 +1406,8 @@ namespace Avalonia.Controls
get { return _selectedItems as IList; }
}
+ protected override ControlTheme ControlThemeOverride => DataGridTheme.Instance;
+
internal DataGridColumnCollection ColumnsInternal
{
get;
diff --git a/src/Avalonia.Controls.DataGrid/DataGridCell.cs b/src/Avalonia.Controls.DataGrid/DataGridCell.cs
index 599bea056b..e6d272c4f6 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridCell.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridCell.cs
@@ -6,7 +6,10 @@
using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Shapes;
+using Avalonia.Controls.Themes;
using Avalonia.Input;
+using Avalonia.Media;
+using Avalonia.Styling;
namespace Avalonia.Controls
{
@@ -35,6 +38,7 @@ namespace Avalonia.Controls
(x,e) => x.DataGridCell_PointerPressed(e), handledEventsToo: true);
FocusableProperty.OverrideDefaultValue(true);
IsTabStopProperty.OverrideDefaultValue(false);
+ BackgroundProperty.OverrideDefaultValue(Brushes.Transparent);
}
public DataGridCell()
{ }
@@ -45,6 +49,8 @@ namespace Avalonia.Controls
internal set { SetAndRaise(IsValidProperty, ref _isValid, value); }
}
+ protected override ControlTheme ControlThemeOverride => DataGridCellTheme.Instance;
+
internal DataGridColumn OwningColumn
{
get => _owningColumn;
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
index 0755864c25..792927a9bc 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
@@ -15,6 +15,8 @@ using System;
using Avalonia.Controls.Utils;
using Avalonia.Controls.Mixins;
using Avalonia.Controls.Metadata;
+using Avalonia.Controls.Themes;
+using Avalonia.Styling;
namespace Avalonia.Controls
{
@@ -104,6 +106,8 @@ namespace Avalonia.Controls
}
}
+ protected override ControlTheme ControlThemeOverride => DataGridColumnHeaderTheme.Instance;
+
internal DataGridColumn OwningColumn
{
get;
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
index dfda7d6e4f..ca3266224c 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRow.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
@@ -15,7 +15,9 @@ using Avalonia.Utilities;
using Avalonia.VisualTree;
using System;
using System.Diagnostics;
+using Avalonia.Controls.Themes;
using Avalonia.Reactive;
+using Avalonia.Styling;
namespace Avalonia.Controls
{
@@ -129,6 +131,7 @@ namespace Avalonia.Controls
AreDetailsVisibleProperty.Changed.AddClassHandler((x, e) => x.OnAreDetailsVisibleChanged(e));
PointerPressedEvent.AddClassHandler((x, e) => x.DataGridRow_PointerPressed(e), handledEventsToo: true);
IsTabStopProperty.OverrideDefaultValue(false);
+ BackgroundProperty.OverrideDefaultValue(Brushes.Transparent);
}
///
@@ -208,6 +211,8 @@ namespace Avalonia.Controls
}
}
+ protected override ControlTheme ControlThemeOverride => DataGridRowTheme.Instance;
+
internal DataGrid OwningGrid
{
get;
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
index e51c2526b1..ffcd36c02f 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
@@ -10,7 +10,9 @@ using Avalonia.Input;
using Avalonia.Media;
using System;
using System.Diagnostics;
+using Avalonia.Controls.Themes;
using Avalonia.Reactive;
+using Avalonia.Styling;
namespace Avalonia.Controls
{
@@ -117,6 +119,8 @@ namespace Avalonia.Controls
AddHandler(InputElement.PointerPressedEvent, (s, e) => DataGridRowGroupHeader_PointerPressed(e), handledEventsToo: true);
}
+ protected override ControlTheme ControlThemeOverride => DataGridRowGroupHeaderTheme.Instance;
+
internal DataGridRowHeader HeaderCell
{
get
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
index c42d21d126..fcfa463310 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
@@ -7,6 +7,8 @@ using Avalonia.Controls.Metadata;
using Avalonia.Input;
using Avalonia.Media;
using System.Diagnostics;
+using Avalonia.Controls.Themes;
+using Avalonia.Styling;
namespace Avalonia.Controls.Primitives
{
@@ -49,6 +51,8 @@ namespace Avalonia.Controls.Primitives
{
AddHandler(PointerPressedEvent, DataGridRowHeader_PointerPressed, handledEventsToo: true);
}
+
+ protected override ControlTheme ControlThemeOverride => DataGridRowHeaderTheme.Instance;
internal Control Owner
{
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml
new file mode 100644
index 0000000000..edd97a9d12
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml.cs
new file mode 100644
index 0000000000..7dfc32200d
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridCellTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridCellTheme : ControlTheme
+{
+ public static DataGridCellTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml
new file mode 100644
index 0000000000..6e02ce0624
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml
@@ -0,0 +1,103 @@
+
+
+ M1875 1011l-787 787v-1798h-128v1798l-787 -787l-90 90l941 941l941 -941z
+ M1965 947l-941 -941l-941 941l90 90l787 -787v1798h128v-1798l787 787z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml.cs
new file mode 100644
index 0000000000..473ea8400d
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridColumnHeaderTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridColumnHeaderTheme : ControlTheme
+{
+ public static DataGridColumnHeaderTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml
new file mode 100644
index 0000000000..675de16956
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml.cs
new file mode 100644
index 0000000000..16492dca7b
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridLeftColumnHeaderTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridLeftColumnHeaderTheme : ControlTheme
+{
+ public static DataGridLeftColumnHeaderTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml
new file mode 100644
index 0000000000..b1b3a2d355
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml
@@ -0,0 +1,28 @@
+
+
+ M515 93l930 931l-930 931l90 90l1022 -1021l-1022 -1021z
+ M109 486 19 576 1024 1581 2029 576 1939 486 1024 1401z
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml.cs
new file mode 100644
index 0000000000..a23deb0cf2
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupExpanderButtonTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridRowGroupExpanderButtonTheme : ControlTheme
+{
+ public static DataGridRowGroupExpanderButtonTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml
new file mode 100644
index 0000000000..f8a135c81d
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml.cs
new file mode 100644
index 0000000000..82ae5e73a5
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowGroupHeaderTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridRowGroupHeaderTheme : ControlTheme
+{
+ public static DataGridRowGroupHeaderTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml
new file mode 100644
index 0000000000..cc63459880
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml.cs
new file mode 100644
index 0000000000..65ed7330d5
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowHeaderTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridRowHeaderTheme : ControlTheme
+{
+ public static DataGridRowHeaderTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml
new file mode 100644
index 0000000000..47f59c2959
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml.cs
new file mode 100644
index 0000000000..cc0a9a91d4
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridRowTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridRowTheme : ControlTheme
+{
+ public static DataGridRowTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml b/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml
new file mode 100644
index 0000000000..2493c3dd0e
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml.cs b/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml.cs
new file mode 100644
index 0000000000..ec2035c3ed
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Themes/DataGridTheme.axaml.cs
@@ -0,0 +1,12 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Styling;
+
+namespace Avalonia.Controls.Themes;
+
+internal partial class DataGridTheme : ControlTheme
+{
+ public static DataGridTheme Instance { get; } = new();
+}
+
diff --git a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
index 082eac60be..8138c8a050 100644
--- a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
+++ b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
@@ -1,5 +1,4 @@
-
+
@@ -13,7 +12,6 @@
-
@@ -32,7 +30,6 @@
-
@@ -46,11 +43,6 @@
0.6
0.8
- M1875 1011l-787 787v-1798h-128v1798l-787 -787l-90 90l941 941l941 -941z
- M1965 947l-941 -941l-941 941l90 90l787 -787v1798h128v-1798l787 787z
- M515 93l930 931l-930 931l90 90l1022 -1021l-1022 -1021z
- M109 486 19 576 1024 1581 2029 576 1939 486 1024 1401z
-
@@ -75,510 +67,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Avalonia.Controls.DataGrid/Themes/Simple.xaml b/src/Avalonia.Controls.DataGrid/Themes/Simple.xaml
index 66160686b6..382ee2e441 100644
--- a/src/Avalonia.Controls.DataGrid/Themes/Simple.xaml
+++ b/src/Avalonia.Controls.DataGrid/Themes/Simple.xaml
@@ -1,373 +1,67 @@
-
+
- 4
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.6
+ 0.8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+