我的UI:
<ListView Name="persons" SelectionChanged="persons_SelectionChanged">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="auto"/>
<GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="auto"/>
</GridView>
</ListView.View>
</ListView>我的UI的代码幕后:
internal void Update(IEnumerable<Person> 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的宽度。即使我对具有长名字的Person调用Update()。不会调整列的大小。
a)如何自动调整" Name "-column的大小(当我调用Update时)为最长名称的长度,但不能长于一个值x(我想指定一个列的最大宽度)?
b)如何指定“年龄”-Column填充控件末端的空间(以便网格视图的列使用控件的整个宽度)?
发布于 2012-02-01 06:36:38
GridView不会自动调整大小。
要调整列的大小,可以执行以下操作
foreach (GridViewColumn c in gv.Columns)
{
// Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector)
// i.e. 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;
} 至于最后要填充的区域的大小,我用转换器来做。我认为这个转换器并不能完全满足您的需求,但它应该可以帮助您入门。
<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}">
[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速度很快,但需要一些时间来照看孩子。
发布于 2012-02-01 01:32:20
我从How to autosize and right-align GridViewColumn data in WPF?那里拿到了这个
<Window.Resources>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</Window.Resources>对你有帮助吗?
https://stackoverflow.com/questions/9083933
复制相似问题