using System.Windows.Data; namespace System.Windows.Forms { public class ColumnHeader { private static DataTemplate cellTemplate = (DataTemplate)System.Windows.Markup.XamlReader.Parse( "" + "" + "" + "" + ""); private ListView owner; internal System.Windows.Controls.GridViewColumn column { get; } public string Text { get => column.Header?.ToString(); set => column.Header = value; } public int Width { get => (int)(column.Width * (owner != null ? owner.DpiScale : 1)); set => column.Width = value / (owner != null ? owner.DpiScale : 1); } internal void SetOwner(ListView owner) => this.owner = owner; internal void SetBinding(int columnIndex) { if (columnIndex == 0) column.CellTemplate = cellTemplate; else column.DisplayMemberBinding = new Binding($"SubItems[{columnIndex}].Text"); } public ColumnHeader() { column = new(); } } }