GridViewColumn宽度调整

我的UI:

        

我的UI的Codebehind:

 internal void Update(IEnumerable pers) { this.persons.ItemsSource = null; this.persons.ItemsSource = pers; UpdateLayout(); } 

我的实体:

 class Person { public string Name { get; set; } public int Age { get; set; } } 

GridViewColumns具有GridViewColumn-Header的宽度。 即使我使用长名称的人调用Update()。 列不会resize。

a)如何自动(当我调用Update时)将“名称”列调整为最长名称的长度,但不长于值x(我想指定列的最大宽度)?

b)如何指定“Age”-Column将空间填充到控件的末尾(以便gridview的列使用控件的完整宽度)?

GridView不会自动resize。

要调整列的大小,您可以

  foreach (GridViewColumn c in gv.Columns) { // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector) // ie it is the same code that is executed when the gripper is double clicked // if (adjustAllColumns || App.StaticGabeLib.FieldDefsGrid[colNum].DispGrid) if (double.IsNaN(c.Width)) { c.Width = c.ActualWidth; } c.Width = double.NaN; } 

至于确定最后填充区域的大小,我使用转换器。 我不认为这个转换器完全符合您的需要,但它应该让您开始。

   [ValueConversion(typeof(double), typeof(double))] public class WidthConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { // value is the total width available double otherWidth; try { otherWidth = System.Convert.ToDouble(parameter); } catch { otherWidth = 100; } if (otherWidth < 0) otherWidth = 0; double width = (double)value - otherWidth; if (width < 0) width = 0; return width; // columnsCount; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

GridView很快但需要一点宝宝坐着。

我从如何在WPF中自动调整和右对齐GridViewColumn数据中提取了这个?

    

这对你有帮助吗?