ListView - подсчет реальной полезной площади - PullRequest
0 голосов
/ 29 июня 2011

Я использую этот метод для изменения размера 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 без границ, скроллеров, мышей, кошек, собак и т. Д.?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 мая 2012

Я не нашел другого решения, вместо того, чтобы установить толщину моей границы внутри моего шаблона ListViewItem на 0 для левой и правой сторон.С этим мои настройки размера столбца были в порядке.Не лучшее решение, но хорошо ...

0 голосов
/ 29 июня 2011

Почему бы вам не установить ширину второго столбца = * и ширину всех остальных столбцов = Auto?Это заставит все столбцы занимать столько места, сколько им нужно, а 2-й столбец займет все оставшееся пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...