当前位置:  开发笔记 > 编程语言 > 正文

如何在WPF中自动调整和右对齐GridViewColumn数据?

如何解决《如何在WPF中自动调整和右对齐GridViewColumn数据?》经验,为你挑选了6个好方法。

我怎么能够:

右对齐ID列中的文本

根据具有最长可见数据的单元格的文本长度使每个列自动调整大小?

这是代码:


    
        
            
            
            
        
    

部分答案:

感谢Kjetil,GridViewColumn.CellTemplate运行良好,自动宽度当然有效但是当使用长于列宽的数据更新ObservativeCollection"Collection"时,列大小不会自行更新,因此这只是一个解决方案.初始显示数据:


    
        
            
                
                    
                        
                    
                
            
            
            
        
    

Kjetil Watne.. 97

要使每个列自动调整大小,可以在GridViewColumn上设置Width ="Auto".

要右对齐ID列中的文本,可以使用TextBlock创建单元格模板并设置TextAlignment.然后设置ListViewItem.Horizo​​ntalContentAlignment(使用ListViewItem上带有setter的样式)使单元格模板填充整个GridViewCell.

也许有一个更简单的解决方案,但这应该有效.

注意:该解决方案在CellTemplate中需要在Window.Resources中使用Horizo​​ntalContentAlignment = Stretch,在TextTemplate中使用TextAlignment = Right.



    


    
        
            
                
                    
                        
                            
                        
                    
                
                
                
            
        
    


+1 for: (13认同)

如果您忘记从GridViewColumn中删除DisplayMemberBinding,它也不起作用.那么模板就没有任何效果了. (7认同)


RandomEngy.. 35

如果内容的宽度发生变化,您将不得不使用这段代码来更新每一列:

private void ResizeGridViewColumn(GridViewColumn column)
{
    if (double.IsNaN(column.Width))
    {
        column.Width = column.ActualWidth;
    }

    column.Width = double.NaN;
}

每次该列的数据更新时,您都必须触发它.



1> Kjetil Watne..:

要使每个列自动调整大小,可以在GridViewColumn上设置Width ="Auto".

要右对齐ID列中的文本,可以使用TextBlock创建单元格模板并设置TextAlignment.然后设置ListViewItem.Horizo​​ntalContentAlignment(使用ListViewItem上带有setter的样式)使单元格模板填充整个GridViewCell.

也许有一个更简单的解决方案,但这应该有效.

注意:该解决方案在CellTemplate中需要在Window.Resources中使用Horizo​​ntalContentAlignment = Stretch,在TextTemplate中使用TextAlignment = Right.



    


    
        
            
                
                    
                        
                            
                        
                    
                
                
                
            
        
    



+1 for:
如果您忘记从GridViewColumn中删除DisplayMemberBinding,它也不起作用.那么模板就没有任何效果了.

2> RandomEngy..:

如果内容的宽度发生变化,您将不得不使用这段代码来更新每一列:

private void ResizeGridViewColumn(GridViewColumn column)
{
    if (double.IsNaN(column.Width))
    {
        column.Width = column.ActualWidth;
    }

    column.Width = double.NaN;
}

每次该列的数据更新时,您都必须触发它.



3> Rolf Wessels..:

如果列表视图也在重新调整大小,那么您可以使用行为模式重新调整列的大小以适应完整的ListView宽度.与使用grid.column定义几乎相同


        
        
            
                
                    
                        
                            
                        
                    

有关示例,请参阅以下链接并链接到源代码 http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto



4> 小智..:

我创建了以下类,并在需要的地方使用了所有应用程序代替GridView:

/// 
/// Represents a view mode that displays data items in columns for a System.Windows.Controls.ListView control with auto sized columns based on the column content     
/// 
public class AutoSizedGridView : GridView
{        
    protected override void PrepareItem(ListViewItem item)
    {
        foreach (GridViewColumn column in Columns)
        {
            // Setting NaN for the column width automatically determines the required
            // width enough to hold the content completely.

            // If the width is NaN, first set it to ActualWidth temporarily.
            if (double.IsNaN(column.Width))
              column.Width = column.ActualWidth;

            // Finally, set the column with to NaN. This raises the property change
            // event and re computes the width.
            column.Width = double.NaN;              
        }            
        base.PrepareItem(item);
    }
}



5> paparazzo..:

由于我有一个ItemContainerStyle,我必须将Horizo​​ntalContentAlignment放在ItemContainerStyle中

    
            
    
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有