このメソッドを使用して、リストビューのサイズを変更し、残りの領域を2番目の列に追加して、水平スクロールバーが表示されないようにします。ListView - 実際に使用可能な領域を集計する
private void SetColumnWidths(object sender)
{
ListView listView = (sender as ListView);
if (listView != null)
if (listView.IsLoaded)
{
listView.UpdateLayout();
GridView gridView = listView.View as GridView;
if (gridView != null)
{
UpdateColumnWidths(gridView);
listView.UpdateLayout();
Decorator border = VisualTreeHelper.GetChild(listView, 0) as Decorator;
if (border != null)
{
ScrollViewer scroller = border.Child as ScrollViewer;
if (scroller != null)
{
ItemsPresenter presenter = scroller.Content as ItemsPresenter;
if (presenter != null)
{
double columnWidth = presenter.ActualWidth - 2;
for (int i = 0; i < gridView.Columns.Count; i++)
{
if (i != 1)
columnWidth -= gridView.Columns[i].ActualWidth;
}
if (columnWidth < 0)
columnWidth = 0;
gridView.Columns[1].Width = columnWidth;
}
}
}
}
}
}
private void UpdateColumnWidths(GridView gridView)
{
foreach (var column in gridView.Columns)
{
if (double.IsNaN(column.Width))
{
column.Width = 0;
column.Width = double.NaN;
}
}
}
すべてがうまく働いている... BorderThickness
は、ListViewコントロールのために、あるいは最悪のListViewItemのテンプレートのいずれか、町に来るまで。私があなたを助けたいのは、ListViewItemのテンプレート用にBorderThickness
を取得して、サイズ変更プロセスを含めることなくそのサイズを変更できるようにすることです。
さらに、境界線、スクロールバー、マウス、ネコ、犬などがなくても、ListViewの実際の使用可能な領域をどのように把握できるか、他の考え方がありますか?
ありがとうございます!
GridViewColumnは、少なくとも私が使用している.Net 3.5では*幅としてサポートしていません。これは.NET 4で変更されていますか? – Dummy01
@ Dummy01 * GridViewColumnsでは*がサポートされていなかったことは決してありません...私はいつもDataGridsを使用しました!興味がある場合は、このサイトに2つの回避策が掲載されています。http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/76b01ab0-df02-41eb-a040-8b985c463681/ – Rachel