ListViewヘッダーのカラムサイズは、指定することは出来てもコントロールのリサイズに追従させることはできません。
そのためリストの右に空白のカラムが表示されて残念な見た目になってしまいます。
Behaviorを作成して、コントロールのリサイズに追従するようにしてみました。
AutoResizeColumnsNumberは、リサイズ時にサイズが変化するカラムです。他のカラムは変化しません。
ListViewHeaderAutoResizeBehavior.cs
public class ListViewHeaderAutoResizeBehavior : Behavior<ListView>
{
public int AutoResizeColumnsNumber { get; set; }
protected sealed override void OnAttached()
{
base.OnAttached();
ListView hostControl = (ListView)this.AssociatedObject;
hostControl.Loaded += Loaded;
hostControl.SizeChanged += SizeChanged;
}
protected sealed override void OnDetaching()
{
base.OnDetaching();
}
private void Loaded(object sender, RoutedEventArgs e)
{
ListView view = sender as ListView;
this.AutoColumnsSizeChanged(view);
}
private void SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
ListView view = sender as ListView;
this.AutoColumnsSizeChanged(view);
}
private void AutoColumnsSizeChanged(ListView view)
{
GridView gridView = view.View as GridView;
double size = 0;
for (int i = 0; i < gridView.Columns.Count; i++)
{
if (this.AutoResizeColumnsNumber != i)
{
size += gridView.Columns[i].ActualWidth;
}
}
if (view.ActualWidth - size > 0)
{
gridView.Columns[this.AutoResizeColumnsNumber].Width = view.ActualWidth - size;
}
}
}
Test.xaml
<ListView>
<i:Interaction.Behaviors>
<cb:ListViewHeaderAutoResizeBehavior AutoResizeColumnsNumber="3" />
</i:Interaction.Behaviors>
</ListView>