提交
This commit is contained in:
1 parent
11599bc7d3
commit
e12c419ef3
5 files changed
+230
-16
No files matched your search
+132
-1
@@ -1,9 +1,14 @@
|
||||
using System;
|
||||
using HandyControl.Controls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace Main.Test;
|
||||
|
||||
@@ -55,4 +60,130 @@ public class DataGridHelper
|
||||
public static readonly DependencyProperty IsActiveProperty =
|
||||
DependencyProperty.RegisterAttached("IsActive", typeof(bool), typeof(DataGridHelper));
|
||||
|
||||
|
||||
|
||||
public static DependencyProperty ShowRowNumberProperty = DependencyProperty.RegisterAttached("ShowRowNumber",
|
||||
typeof(bool), typeof(DataGridAttach),
|
||||
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits, OnShowRowNumberChanged));
|
||||
|
||||
public static bool GetShowRowNumber(DependencyObject target) => (bool)target.GetValue(ShowRowNumberProperty);
|
||||
|
||||
public static void SetShowRowNumber(DependencyObject target, bool value) => target.SetValue(ShowRowNumberProperty, value);
|
||||
|
||||
private static void OnShowRowNumberChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (target is not DataGrid dataGrid) return;
|
||||
var show = (bool)e.NewValue;
|
||||
|
||||
if (show)
|
||||
{
|
||||
dataGrid.LoadingRow += DataGrid_LoadingRow;
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged += ItemContainerGeneratorItemsChanged;
|
||||
}
|
||||
else
|
||||
{
|
||||
dataGrid.LoadingRow -= DataGrid_LoadingRow;
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged -= ItemContainerGeneratorItemsChanged;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ItemContainerGeneratorItemsChanged(object sender, ItemsChangedEventArgs e)
|
||||
{
|
||||
var generator = dataGrid.ItemContainerGenerator;
|
||||
var itemsCount = dataGrid.Items.Count;
|
||||
|
||||
if (show)
|
||||
{
|
||||
for (var i = 0; i < itemsCount; i++)
|
||||
{
|
||||
var row = (DataGridRow)generator.ContainerFromIndex(i);
|
||||
if (row != null)
|
||||
{
|
||||
row.Header = (i + 1).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < itemsCount; i++)
|
||||
{
|
||||
var row = (DataGridRow)generator.ContainerFromIndex(i);
|
||||
if (row != null)
|
||||
{
|
||||
row.Header = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) => e.Row.Header = (e.Row.GetIndex() + 1).ToString();
|
||||
|
||||
|
||||
|
||||
|
||||
public static readonly DependencyProperty ShowBorderProperty =
|
||||
DependencyProperty.RegisterAttached("ShowBorder", typeof(bool),
|
||||
typeof(DataGridHelper), new PropertyMetadata(false, OnShowBorderChanged));
|
||||
|
||||
public static void SetShowBorder(DependencyObject element, bool value)
|
||||
=> element.SetValue(ShowBorderProperty, value);
|
||||
|
||||
public static bool GetShowBorder(DependencyObject element)
|
||||
=> (bool)element.GetValue(ShowBorderProperty);
|
||||
|
||||
private static void OnShowBorderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (d is DataGridColumnHeader header && (bool)e.NewValue)
|
||||
{
|
||||
header.Loaded += (s, args) =>
|
||||
{
|
||||
var layer = AdornerLayer.GetAdornerLayer(header);
|
||||
if (layer != null)
|
||||
{
|
||||
layer.Add(new BorderAdorner(header));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public class BorderAdorner : Adorner
|
||||
{
|
||||
public BorderAdorner(UIElement adornedElement) : base(adornedElement) { }
|
||||
|
||||
protected override void OnRender(DrawingContext drawingContext)
|
||||
{
|
||||
var header = AdornedElement as DataGridColumnHeader;
|
||||
if (header == null) return;
|
||||
|
||||
var pen = new Pen(header.BorderBrush ?? new SolidColorBrush(Colors.LightGray), 1);
|
||||
|
||||
// 绘制右侧竖线(永远不消失)
|
||||
drawingContext.DrawLine(pen,
|
||||
new Point(header.ActualWidth - 0.5, 0),
|
||||
new Point(header.ActualWidth - 0.5, header.ActualHeight));
|
||||
}
|
||||
}
|
||||
// 先创建自定义类(如果还没创建)
|
||||
public class CustomDataGridColumnHeader : DataGridColumnHeader
|
||||
{
|
||||
protected override void OnRender(DrawingContext drawingContext)
|
||||
{
|
||||
base.OnRender(drawingContext);
|
||||
|
||||
// 在这里绘制边框,永远不消失
|
||||
var pen = new Pen(new SolidColorBrush(Colors.LightGray), 1);
|
||||
|
||||
// 绘制右侧竖线
|
||||
drawingContext.DrawLine(pen,
|
||||
new Point(ActualWidth - 0.5, 0),
|
||||
new Point(ActualWidth - 0.5, ActualHeight));
|
||||
|
||||
// 绘制底部横线(如果需要)
|
||||
// drawingContext.DrawLine(pen,
|
||||
// new Point(0, ActualHeight - 0.5),
|
||||
// new Point(ActualWidth, ActualHeight - 0.5));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user