diff --git a/samples/ControlCatalog/Pages/DataGridPage.xaml b/samples/ControlCatalog/Pages/DataGridPage.xaml
index f1fcd8035a..4c3c211ca5 100644
--- a/samples/ControlCatalog/Pages/DataGridPage.xaml
+++ b/samples/ControlCatalog/Pages/DataGridPage.xaml
@@ -14,22 +14,6 @@
-
-
-
-
-
-
A control for displaying and interacting with a data source.
@@ -45,8 +29,7 @@
+ RowBackground="#1000">
@@ -59,6 +42,24 @@
IsVisible="{Binding #ShowGDP.IsChecked}"
x:DataType="local:Country" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -71,6 +72,20 @@
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs
index c6cc9bf278..a9f2e889b9 100644
--- a/src/Avalonia.Controls.DataGrid/DataGrid.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs
@@ -26,6 +26,7 @@ using Avalonia.Controls.Utils;
using Avalonia.Layout;
using Avalonia.Controls.Metadata;
using Avalonia.Input.GestureRecognizers;
+using Avalonia.Styling;
namespace Avalonia.Controls
{
@@ -238,29 +239,72 @@ namespace Avalonia.Controls
AvaloniaProperty.Register(nameof(ColumnWidth), defaultValue: DataGridLength.Auto);
///
- /// Gets or sets the standard width or automatic sizing mode of columns in the control.
+ /// Identifies the dependency property.
///
- public DataGridLength ColumnWidth
+ public static readonly StyledProperty RowThemeProperty =
+ AvaloniaProperty.Register(nameof(RowTheme));
+
+ ///
+ /// Gets or sets the theme applied to all rows.
+ ///
+ public ControlTheme RowTheme
{
- get { return GetValue(ColumnWidthProperty); }
- set { SetValue(ColumnWidthProperty, value); }
+ get { return GetValue(RowThemeProperty); }
+ set { SetValue(RowThemeProperty, value); }
}
- public static readonly StyledProperty AlternatingRowBackgroundProperty =
- AvaloniaProperty.Register(nameof(AlternatingRowBackground));
+ ///
+ /// Identifies the dependency property.
+ ///
+ public static readonly StyledProperty CellThemeProperty =
+ AvaloniaProperty.Register(nameof(CellTheme));
///
- /// Gets or sets the that is used to paint the background of odd-numbered rows.
+ /// Gets or sets the theme applied to all cells.
///
- ///
- /// The brush that is used to paint the background of odd-numbered rows. The default is a
- /// with a
- /// value of white (ARGB value #00FFFFFF).
- ///
- public IBrush AlternatingRowBackground
+ public ControlTheme CellTheme
+ {
+ get { return GetValue(CellThemeProperty); }
+ set { SetValue(CellThemeProperty, value); }
+ }
+
+ ///
+ /// Identifies the dependency property.
+ ///
+ public static readonly StyledProperty ColumnHeaderThemeProperty =
+ AvaloniaProperty.Register(nameof(ColumnHeaderTheme));
+
+ ///
+ /// Gets or sets the theme applied to all column headers.
+ ///
+ public ControlTheme ColumnHeaderTheme
+ {
+ get { return GetValue(ColumnHeaderThemeProperty); }
+ set { SetValue(ColumnHeaderThemeProperty, value); }
+ }
+
+ ///
+ /// Identifies the dependency property.
+ ///
+ public static readonly StyledProperty RowGroupThemeProperty =
+ AvaloniaProperty.Register(nameof(RowGroupTheme));
+
+ ///
+ /// Gets or sets the theme applied to all row groups.
+ ///
+ public ControlTheme RowGroupTheme
{
- get { return GetValue(AlternatingRowBackgroundProperty); }
- set { SetValue(AlternatingRowBackgroundProperty, value); }
+ get { return GetValue(RowGroupThemeProperty); }
+ set { SetValue(RowGroupThemeProperty, value); }
+ }
+
+ ///
+ /// Gets or sets the standard width or automatic sizing mode of columns in the control.
+ ///
+ public DataGridLength ColumnWidth
+ {
+ get { return GetValue(ColumnWidthProperty); }
+ set { SetValue(ColumnWidthProperty, value); }
}
public static readonly StyledProperty FrozenColumnCountProperty =
@@ -2058,7 +2102,7 @@ namespace Avalonia.Controls
forceHorizontalScroll: true);
}
}
-
+
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
@@ -2167,7 +2211,7 @@ namespace Avalonia.Controls
return desiredSize;
}
-
+
///
protected override void OnDataContextBeginUpdate()
{
@@ -2183,7 +2227,7 @@ namespace Avalonia.Controls
NotifyDataContextPropertyForAllRowCells(GetAllRows(), false);
}
-
+
///
/// Raises the BeginningEdit event.
///
@@ -3242,7 +3286,6 @@ namespace Avalonia.Controls
}
}
- //TODO Styles
private void AddNewCellPrivate(DataGridRow row, DataGridColumn column)
{
DataGridCell newCell = new DataGridCell();
@@ -3255,8 +3298,11 @@ namespace Avalonia.Controls
{
newCell.OwningColumn = column;
newCell.IsVisible = column.IsVisible;
+ if (row.OwningGrid.CellTheme is {} cellTheme)
+ {
+ newCell.SetValue(ThemeProperty, cellTheme, BindingPriority.TemplatedParent);
+ }
}
- //newCell.EnsureStyle(null);
row.Cells.Insert(column.Index, newCell);
}
@@ -4537,7 +4583,6 @@ namespace Avalonia.Controls
FlushCurrentCellChanged();
}
- //TODO Styles
private void PopulateCellContent(bool isCellEdited,
DataGridColumn dataGridColumn,
DataGridRow dataGridRow,
@@ -4575,7 +4620,7 @@ namespace Avalonia.Controls
dataGridCell.Content = element;
}
-
+
}
private void PreparingCellForEditPrivate(Control editingElement)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
index fbdb979e24..191c3fc5b1 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
@@ -231,7 +231,7 @@ namespace Avalonia.Controls
}
///
- /// Gets or sets a value that indicates whether the user can change the column display position by
+ /// Gets or sets a value that indicates whether the user can change the column display position by
/// dragging the column header.
///
///
@@ -260,15 +260,15 @@ namespace Avalonia.Controls
///
public bool CanUserResize
{
- get
+ get
{
return
CanUserResizeInternal ??
OwningGrid?.CanUserResizeColumns ??
DataGrid.DATAGRID_defaultCanUserResizeColumns;
}
- set
- {
+ set
+ {
CanUserResizeInternal = value;
OwningGrid?.OnColumnCanUserResizeChanged(this);
}
@@ -321,16 +321,16 @@ namespace Avalonia.Controls
///
///
/// When setting this property, the specified value is less than -1 or equal to .
- ///
+ ///
/// -or-
- ///
+ ///
/// When setting this property on a column in a , the specified value is less than zero or greater than or equal to the number of columns in the .
///
///
/// When setting this property, the is already making adjustments. For example, this exception is thrown when you attempt to set in a event handler.
- ///
+ ///
/// -or-
- ///
+ ///
/// When setting this property, the specified value would result in a frozen column being displayed in the range of unfrozen columns, or an unfrozen column being displayed in the range of frozen columns.
///
public int DisplayIndex
@@ -401,7 +401,7 @@ namespace Avalonia.Controls
}
}
}
-
+
///
/// Backing field for CellTheme property.
///
@@ -412,7 +412,7 @@ namespace Avalonia.Controls
(o, v) => o.CellTheme = v);
///
- /// Gets or sets the cell theme.
+ /// Gets or sets the cell theme.
///
public ControlTheme CellTheme
{
@@ -430,14 +430,14 @@ namespace Avalonia.Controls
(o, v) => o.Header = v);
///
- /// Gets or sets the content
+ /// Gets or sets the content
///
public object Header
{
get { return _header; }
set { SetAndRaise(HeaderProperty, ref _header, value); }
}
-
+
///
/// Backing field for Header property
///
@@ -455,7 +455,7 @@ namespace Avalonia.Controls
get { return _headerTemplate; }
set { SetAndRaise(HeaderTemplateProperty, ref _headerTemplate, value); }
}
-
+
public bool IsAutoGenerated
{
get;
@@ -750,7 +750,7 @@ namespace Avalonia.Controls
protected abstract IControl GenerateEditingElement(DataGridCell cell, object dataItem, out ICellEditBinding binding);
///
- /// When overridden in a derived class, gets a read-only element that is bound to the column's
+ /// When overridden in a derived class, gets a read-only element that is bound to the column's
/// property value.
///
///
@@ -765,7 +765,7 @@ namespace Avalonia.Controls
protected abstract IControl GenerateElement(DataGridCell cell, object dataItem);
///
- /// Called by a specific column type when one of its properties changed,
+ /// Called by a specific column type when one of its properties changed,
/// and its current cells need to be updated.
///
/// Indicates which property changed and caused this call
@@ -882,9 +882,8 @@ namespace Avalonia.Controls
{
LayoutRoundedWidth = ActualWidth;
}
- }
+ }
- //TODO Styles
internal virtual DataGridColumnHeader CreateHeader()
{
var result = new DataGridColumnHeader
@@ -893,8 +892,10 @@ namespace Avalonia.Controls
};
result[!ContentControl.ContentProperty] = this[!HeaderProperty];
result[!ContentControl.ContentTemplateProperty] = this[!HeaderTemplateProperty];
-
- //result.EnsureStyle(null);
+ if (OwningGrid.ColumnHeaderTheme is {} columnTheme)
+ {
+ result.SetValue(StyledElement.ThemeProperty, columnTheme, BindingPriority.TemplatedParent);
+ }
return result;
}
diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
index d3bd968d62..740e3516f6 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
@@ -76,7 +76,7 @@ namespace Avalonia.Controls
}
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
//TODO Implement
public DataGridColumnHeader()
@@ -267,7 +267,7 @@ namespace Avalonia.Controls
else
{
newSort = sort;
- }
+ }
// changing direction should not affect sort order, so we replace this column's
// sort description instead of just adding it to the end of the collection
@@ -603,7 +603,7 @@ namespace Avalonia.Controls
}
///
- /// Returns true if the mouse is
+ /// Returns true if the mouse is
/// - to the left of the element, or within the left half of the element
/// and
/// - within the vertical range of the element, or ignoreVertical == true
@@ -663,16 +663,19 @@ namespace Avalonia.Controls
IsMouseOver = false;
}
- //TODO Styles DragIndicator
private void OnMouseMove_BeginReorder(Point mousePosition)
{
- DataGridColumnHeader dragIndicator = new DataGridColumnHeader
+ var dragIndicator = new DataGridColumnHeader
{
OwningColumn = OwningColumn,
IsEnabled = false,
Content = Content,
ContentTemplate = ContentTemplate
};
+ if (OwningGrid.ColumnHeaderTheme is {} columnHeaderTheme)
+ {
+ dragIndicator.SetValue(ThemeProperty, columnHeaderTheme, BindingPriority.TemplatedParent);
+ }
dragIndicator.PseudoClasses.Add(":dragIndicator");
@@ -720,7 +723,7 @@ namespace Avalonia.Controls
{
return;
}
-
+
//handle entry into reorder mode
if (_dragMode == DragMode.MouseDown && _dragColumn == null && _lastMousePositionHeaders != null && (distanceFromRight > DATAGRIDCOLUMNHEADER_resizeRegionWidth && distanceFromLeft > DATAGRIDCOLUMNHEADER_resizeRegionWidth))
{
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
index 1559763a1b..cd22934ac0 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRow.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
@@ -89,7 +89,7 @@ namespace Avalonia.Controls
o => o.IsValid);
///
- /// Gets a value that indicates whether the data in a row is valid.
+ /// Gets a value that indicates whether the data in a row is valid.
///
public bool IsValid
{
@@ -130,7 +130,7 @@ namespace Avalonia.Controls
}
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
public DataGridRow()
{
@@ -240,7 +240,6 @@ namespace Avalonia.Controls
private set;
}
- //TODO Styles
internal DataGridCell FillerCell
{
get
@@ -252,7 +251,10 @@ namespace Avalonia.Controls
IsVisible = false,
OwningRow = this
};
- //_fillerCell.EnsureStyle(null);
+ if (OwningGrid.CellTheme is {} cellTheme)
+ {
+ _fillerCell.SetValue(ThemeProperty, cellTheme, BindingPriority.TemplatedParent);
+ }
if (_cellsElement != null)
{
_cellsElement.Children.Add(_fillerCell);
@@ -506,7 +508,7 @@ namespace Avalonia.Controls
}
///
- /// Measures the children of a to
+ /// Measures the children of a to
/// prepare for arranging them during the pass.
///
///
@@ -709,8 +711,6 @@ namespace Avalonia.Controls
}
}
- // Set the proper style for the Header by walking up the Style hierarchy
- //TODO Styles
internal void EnsureHeaderStyleAndVisibility(Styling.Style previousStyle)
{
if (_headerElement != null && OwningGrid != null)
@@ -785,7 +785,7 @@ namespace Avalonia.Controls
OwningGrid?.OnRowDetailsChanged();
}
- // Returns the actual template that should be sued for Details: either explicity set on this row
+ // Returns the actual template that should be sued for Details: either explicity set on this row
// or inherited from the DataGrid
private IDataTemplate ActualDetailsTemplate
{
@@ -890,7 +890,7 @@ namespace Avalonia.Controls
//TODO Cleanup
double? _previousDetailsHeight = null;
- //TODO Animation
+ //TODO Animation
private void DetailsContent_HeightChanged(double newValue)
{
if (_previousDetailsHeight.HasValue)
@@ -907,7 +907,7 @@ namespace Avalonia.Controls
_detailsElement.ContentHeight = newValue;
- // Calling this when details are not visible invalidates during layout when we have no work
+ // Calling this when details are not visible invalidates during layout when we have no work
// to do. In certain scenarios, this could cause a layout cycle
OnRowDetailsChanged();
}
@@ -1060,7 +1060,7 @@ namespace Avalonia.Controls
}
}
}
-
+
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
@@ -1084,7 +1084,4 @@ namespace Avalonia.Controls
}
}
-
- //TODO Styles
-
}
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
index 69e6766bfd..c746b19cc7 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
@@ -53,7 +53,7 @@ namespace Avalonia.Controls
AvaloniaProperty.Register(nameof(PropertyName));
///
- /// Gets or sets the name of the property that this row is bound to.
+ /// Gets or sets the name of the property that this row is bound to.
///
public string PropertyName
{
@@ -85,8 +85,8 @@ namespace Avalonia.Controls
}
///
- /// Gets or sets a value that indicates the amount that the
- /// children of the are indented.
+ /// Gets or sets a value that indicates the amount that the
+ /// children of the are indented.
///
public double SublevelIndent
{
@@ -327,9 +327,9 @@ namespace Avalonia.Controls
{
double xClip = Math.Round(frozenLeftEdge - childLeftEdge);
var rg = new RectangleGeometry();
- rg.Rect =
- new Rect(xClip, 0,
- Math.Max(0, child.Bounds.Width - xClip),
+ rg.Rect =
+ new Rect(xClip, 0,
+ Math.Max(0, child.Bounds.Width - xClip),
child.Bounds.Height);
child.Clip = rg;
}
@@ -348,8 +348,6 @@ namespace Avalonia.Controls
}
}
- //TODO Styles
- //internal void EnsureHeaderStyleAndVisibility(Style previousStyle)
internal void EnsureHeaderVisibility()
{
if (_headerElement != null && OwningGrid != null)
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRows.cs b/src/Avalonia.Controls.DataGrid/DataGridRows.cs
index f3afe2c42d..17a7eab2e0 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRows.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRows.cs
@@ -14,6 +14,9 @@ using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
+using Avalonia.Data;
+using Avalonia.Styling;
+using JetBrains.Annotations;
namespace Avalonia.Controls
{
@@ -117,7 +120,7 @@ namespace Avalonia.Controls
detailsCount += GetDetailsCountInclusive(DisplayData.LastScrollingSlot + 1, SlotCount - 1);
}
- //
+ //
double totalDetailsHeight = detailsCount * RowDetailsHeightEstimate;
return totalRowsHeight + totalDetailsHeight;
@@ -163,7 +166,7 @@ namespace Avalonia.Controls
}
///
- /// Clears the entire selection except the indicated row. Displayed rows are deselected explicitly to
+ /// Clears the entire selection except the indicated row. Displayed rows are deselected explicitly to
/// visualize potential transition effects. The row indicated is selected if it is not already.
///
internal void ClearRowSelection(int slotException, bool setAnchorSlot)
@@ -270,10 +273,10 @@ namespace Avalonia.Controls
bool isRow = rowIndex != -1;
if (isCollapsed)
{
- InsertElement(slot,
- element: null,
+ InsertElement(slot,
+ element: null,
updateVerticalScrollBarOnly: true,
- isCollapsed: true,
+ isCollapsed: true,
isRow: isRow);
}
else if (SlotIsDisplayed(slot))
@@ -285,18 +288,18 @@ namespace Avalonia.Controls
}
else
{
- InsertElement(slot, GenerateRowGroupHeader(slot, groupInfo),
+ InsertElement(slot, GenerateRowGroupHeader(slot, groupInfo),
updateVerticalScrollBarOnly: false,
- isCollapsed: false,
+ isCollapsed: false,
isRow: isRow);
}
}
else
{
- InsertElement(slot,
+ InsertElement(slot,
element: null,
updateVerticalScrollBarOnly: _vScrollBar == null || _vScrollBar.IsVisible,
- isCollapsed: false,
+ isCollapsed: false,
isRow: isRow);
}
}
@@ -417,7 +420,7 @@ namespace Avalonia.Controls
if (scrolledHorizontally && DisplayData.FirstScrollingSlot <= slot && DisplayData.LastScrollingSlot >= slot)
{
// If the slot is displayed and we scrolled horizontally, column virtualization could cause the rows to grow.
- // As a result we need to force measure on the rows we're displaying and recalculate our First and Last slots
+ // As a result we need to force measure on the rows we're displaying and recalculate our First and Last slots
// so they're accurate
foreach (DataGridRow row in DisplayData.GetScrollingRows())
{
@@ -455,7 +458,7 @@ namespace Avalonia.Controls
deltaY -= GetSlotElementsHeight(slot, firstFullSlot);
if (DisplayData.FirstScrollingSlot - slot > 1)
{
- //
+ //
ResetDisplayedRows();
}
@@ -519,7 +522,7 @@ namespace Avalonia.Controls
_verticalOffset = NegVerticalOffset;
}
- //
+ //
Debug.Assert(MathUtilities.LessThanOrClose(NegVerticalOffset, _verticalOffset));
SetVerticalOffset(_verticalOffset);
@@ -1025,6 +1028,10 @@ namespace Avalonia.Controls
dataGridRow.Slot = slot;
dataGridRow.OwningGrid = this;
dataGridRow.DataContext = dataContext;
+ if (RowTheme is {} rowTheme)
+ {
+ dataGridRow.SetValue(ThemeProperty, rowTheme, BindingPriority.TemplatedParent);
+ }
CompleteCellsCollection(dataGridRow);
OnLoadingRow(new DataGridRowEventArgs(dataGridRow));
@@ -1104,7 +1111,7 @@ namespace Avalonia.Controls
///
/// Checks if the row for the provided dataContext has been generated and is present
- /// in either the loaded rows, pre-fetched rows, or editing row.
+ /// in either the loaded rows, pre-fetched rows, or editing row.
/// The displayed rows are *not* searched. Returns null if the row does not belong to those 3 categories.
///
private DataGridRow GetGeneratedRow(object dataContext)
@@ -1152,8 +1159,8 @@ namespace Avalonia.Controls
}
else
{
- // If we're grouping, the GroupLevel needs to be fixed later by methods calling this
- // which end up inserting rows. We don't do it here because elements could be inserted
+ // If we're grouping, the GroupLevel needs to be fixed later by methods calling this
+ // which end up inserting rows. We don't do it here because elements could be inserted
// from top to bottom or bottom to up so it's better to do in one pass
slotElement = GenerateRow(RowIndexFromSlot(slot), slot);
}
@@ -1161,7 +1168,6 @@ namespace Avalonia.Controls
return slotElement;
}
- //TODO Styles
private void InsertDisplayedElement(int slot, Control element, bool wasNewlyAdded, bool updateSlotInformation)
{
// We can only support creating new rows that are adjacent to the currently visible rows
@@ -1479,7 +1485,6 @@ namespace Avalonia.Controls
}
}
- //TODO Styles
// Makes sure the row shows the proper visuals for selection, currency, details, etc.
private void LoadRowVisualsForDisplay(DataGridRow row)
{
@@ -1694,7 +1699,7 @@ namespace Avalonia.Controls
{
// Figure out what row we've scrolled down to and update the value for NegVerticalOffset
NegVerticalOffset = 0;
- //
+ //
if (height > 2 * CellsHeight &&
(RowDetailsVisibilityMode != DataGridRowDetailsVisibilityMode.VisibleWhenSelected || RowDetailsTemplate == null))
{
@@ -1755,7 +1760,7 @@ namespace Avalonia.Controls
// Figure out what row we've scrolled up to and update the value for NegVerticalOffset
deltaY = -NegVerticalOffset;
NegVerticalOffset = 0;
- //
+ //
if (height < -2 * CellsHeight &&
(RowDetailsVisibilityMode != DataGridRowDetailsVisibilityMode.VisibleWhenSelected || RowDetailsTemplate == null))
@@ -1813,7 +1818,7 @@ namespace Avalonia.Controls
if (MathUtilities.GreaterThanOrClose(0, newVerticalOffset) && newFirstScrollingSlot != 0)
{
// We've scrolled to the top of the ScrollBar, automatically place the user at the very top
- // of the DataGrid. If this produces very odd behavior, evaluate the RowHeight estimate.
+ // of the DataGrid. If this produces very odd behavior, evaluate the RowHeight estimate.
// strategy. For most data, this should be unnoticeable.
ResetDisplayedRows();
NegVerticalOffset = 0;
@@ -1994,7 +1999,6 @@ namespace Avalonia.Controls
VisibleSlotCount = 0;
}
- //TODO Styles
private void UnloadRow(DataGridRow dataGridRow)
{
Debug.Assert(dataGridRow != null);
@@ -2010,16 +2014,13 @@ namespace Avalonia.Controls
OnUnloadingRow(new DataGridRowEventArgs(dataGridRow));
bool recycleRow = CurrentSlot != dataGridRow.Index;
- // Don't recycle if the row has a custom Style set
- //recycleRow &= (dataGridRow.Style == null || dataGridRow.Style == RowStyle);
-
if (recycleRow)
{
DisplayData.AddRecyclableRow(dataGridRow);
}
else
{
- //
+ //
_rowsPresenter.Children.Remove(dataGridRow);
dataGridRow.DetachFromDataGrid(false);
}
@@ -2240,10 +2241,10 @@ namespace Avalonia.Controls
group.Items.CollectionChanged += CollectionViewGroup_CollectionChanged;
}
var newGroupInfo = new DataGridRowGroupInfo(group, true, parentGroupInfo.Level + 1, insertSlot, insertSlot);
- InsertElementAt(insertSlot,
- rowIndex: -1,
- item: null,
- groupInfo: newGroupInfo,
+ InsertElementAt(insertSlot,
+ rowIndex: -1,
+ item: null,
+ groupInfo: newGroupInfo,
isCollapsed: isCollapsed);
RowGroupHeadersTable.AddValue(insertSlot, newGroupInfo);
}
@@ -2256,9 +2257,9 @@ namespace Avalonia.Controls
{
AutoGenerateColumnsPrivate();
}
- InsertElementAt(insertSlot, rowIndex,
+ InsertElementAt(insertSlot, rowIndex,
item: e.NewItems[0],
- groupInfo: null,
+ groupInfo: null,
isCollapsed: isCollapsed);
}
@@ -2448,13 +2449,12 @@ namespace Avalonia.Controls
VisibleSlotCount = SlotCount;
}
- //TODO Styles
private void RefreshRowGroupHeaders()
{
if (DataConnection.CollectionView != null
&& DataConnection.CollectionView.CanGroup
&& DataConnection.CollectionView.Groups != null
- && DataConnection.CollectionView.IsGrouping
+ && DataConnection.CollectionView.IsGrouping
&& DataConnection.CollectionView.GroupingDepth > 0)
{
// Initialize our array for the height of the RowGroupHeaders by Level.
@@ -2476,7 +2476,7 @@ namespace Avalonia.Controls
double indent;
for (int i = 0; i < groupLevelCount; i++)
{
- indent = DATAGRID_defaultRowGroupSublevelIndent;
+ indent = DATAGRID_defaultRowGroupSublevelIndent;
RowGroupSublevelIndents[i] = indent;
if (i > 0)
{
@@ -2742,6 +2742,10 @@ namespace Avalonia.Controls
groupHeader.RowGroupInfo = rowGroupInfo;
groupHeader.DataContext = rowGroupInfo.CollectionViewGroup;
groupHeader.Level = rowGroupInfo.Level;
+ if (RowGroupTheme is {} rowGroupTheme)
+ {
+ groupHeader.SetValue(ThemeProperty, rowGroupTheme, BindingPriority.TemplatedParent);
+ }
// Set the RowGroupHeader's PropertyName. Unfortunately, CollectionViewGroup doesn't have this
// so we have to set it manually
diff --git a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
index 3d98722da5..a3c0ed1d0c 100644
--- a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
+++ b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml
@@ -232,7 +232,7 @@
-
+
@@ -337,10 +337,6 @@
-
-
-