在WPF TreeListView中自动调整列大小

在WPF TreeListView中自动调整列大小,wpf,c#-4.0,resize,treelistview,Wpf,C# 4.0,Resize,Treelistview,我正在尝试自动调整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 (GridVie

我正在尝试自动调整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;
            }
        }
    }
但是当我调整它的大小时,列宽并没有考虑到行的边距,单词会被像10px一样的切掉,然后如果我双击该列,它将调整大小而不切掉单词

我也尝试过这种方法,但运气不佳:

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

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

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

有人知道如何解决这个问题吗?

经过几个小时的努力,我终于找到了答案。列宽被设置为ActualWidth,它小于它应该的宽度,因此如果我将列宽设置为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;
        }
    }
}