Автоматическое изменение размера столбцов в WPF TreeListView - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь автоматически изменить размеры столбцов WPF TreeListView (http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspx), используя этот код:

    public void AutoResizeColumns()
    {
        GridView gv = this.View as GridView;

        if (gv != null)
        {
            foreach (GridViewColumn gvc in gv.Columns)
            {

                if (double.IsNaN(gvc.Width))
                    gvc.Width = gvc.ActualWidth;

                gvc.Width = double.NaN;
            }
        }
    }

Но когда я изменяю его размер, ширина столбца не учитывает поля строки ислова обрезаются примерно на 10 пикселей, а затем, если я дважды щелкну по столбцу, он изменит размер, не обрезая слова.

Я также попытался безуспешно:

    public void AutoResizeColumns()
    {
        GridView gv = this.View as GridView;

        if (gv != null)
        {
            foreach (GridViewColumn gvc in gv.Columns)
            {

                gvc.Width = gvc.ActualWidth + 10;
            }
        }
    }

Кто-нибудь знает как это исправить?

1 Ответ

0 голосов
/ 09 декабря 2010

После нескольких часов попыток понять это, я наконец-то понял.Для столбца Width устанавливается значение ActualWidth, которое меньше его предполагаемого значения, поэтому если я установлю для столбца Width значение double.MaxValue, то когда для него будет задано значение double.NaN, он изменит размер до «реальной» фактической ширины.

Вот код:

public void AutoResizeColumns()
{
    GridView gv = this.View as GridView;

    if (gv != null)
    {
        foreach (GridViewColumn gvc in gv.Columns)
        {
            // Set width to highest possible value
            gvc.Width = double.MaxValue;

            // Set to NaN to get the "real" actual width
            gvc.Width = double.NaN;
        }
    }
}
...