Я использую этот метод для изменения размера 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. Что я хочу, чтобы вы мне помогли, так это как я могу получить BorderThickness
для шаблона ListViewItem, чтобы я мог начать процесс изменения размера без его включения.
Или, что еще лучше, у вас есть идея, как я могу определить реальную полезную область ListView без границ, скроллеров, мышей, кошек, собак и т. Д.?
Заранее спасибо!