开发者

ListView - Counting Real Usable Area

I am using this method to resize a ListView adjusting its columns to the space each one needed and adding the remaining space to the second column, so that no horizontal scroll bar appears.

    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 开发者_Python百科(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;
            }
        }
    }

Everything is working just fine... until BorderThickness comes to town, either for ListView or even worst for the template of ListViewItem. What I want you to help me is on how I can retrieve the BorderThickness for the template of ListViewItem so that I start my resize process without including it.

Or even better do you have any other idea how I can figure out the real usable area of the ListView, without borders, scrollers, mice, cats, dogs, etc?

Thank you in advance!


Why don't you set your 2nd Column Width = * and all other Column Width's = Auto? This will make all columns take up however much space they need, and the 2nd column will take up all remaining space.


I didn't find any other solution instead of setting my border's thickness inside my ListViewItem template to 0 for left and right sides. With that my column size adjustments were ok. Not the best solution, but ok...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜