From 5aca7997cac598f6bf54b4a7200e503c03a3d9d1 Mon Sep 17 00:00:00 2001 From: Dong Bin <14807942+rabbitism@users.noreply.github.com> Date: Sat, 15 Feb 2025 09:13:16 +0800 Subject: [PATCH] feat: use visual brush if Header is control. (#18154) --- .../DataGridColumnHeader.cs | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs index a3dcc433ee..341159f861 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs @@ -12,6 +12,8 @@ using Avalonia.Collections; using Avalonia.Controls.Automation.Peers; using Avalonia.Controls.Metadata; using Avalonia.Controls.Mixins; +using Avalonia.Controls.Shapes; +using Avalonia.Controls.Templates; using Avalonia.Controls.Utils; using Avalonia.Data; using Avalonia.Input; @@ -678,8 +680,7 @@ namespace Avalonia.Controls { OwningColumn = OwningColumn, IsEnabled = false, - Content = Content, - ContentTemplate = ContentTemplate + Content = GetDragIndicatorContent(Content, ContentTemplate) }; if (OwningGrid.ColumnHeaderTheme is { } columnHeaderTheme) { @@ -725,6 +726,36 @@ namespace Avalonia.Controls } } + private object GetDragIndicatorContent(object content, IDataTemplate? dataTemplate) + { + if (content is ContentControl icc) + { + content = icc.Content; + } + + if (content is Control control) + { + if (VisualRoot == null) return content; + control.Measure(Size.Infinity); + var rect = new Rectangle() + { + Width = control.DesiredSize.Width, + Height = control.DesiredSize.Height, + Fill = new VisualBrush + { + Visual = control, Stretch = Stretch.None, AlignmentX = AlignmentX.Left, + } + }; + return rect; + } + + if (dataTemplate is not null) + { + return dataTemplate.Build(content); + } + return content; + } + //TODO DragEvents private void OnMouseMove_Reorder(ref bool handled, Point mousePosition, Point mousePositionHeaders) {