首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改ItemsSource时,GridView列宽不会更新

更改ItemsSource时,GridView列宽不会更新
EN

Stack Overflow用户
提问于 2012-01-31 19:38:42
回答 2查看 5.8K关注 0票数 3

我有一个在代码隐藏中设置ItemsSource的GridView。网格中的所有列都是用XAML定义的,并且所有的列宽都是"Auto“。当我最初设置网格的ItemsSource时,列宽设置正确。

现在,根据用户的操作,可以将网格的ItemsSource设置为新的EntityCollection。我注意到的是,列宽与前一个ItemsSource的列宽相同。也就是说,当为网格设置新的ItemsSource时,列宽似乎不会自动调整。在代码隐藏或XAML中,有没有办法强制网格在设置列宽时使用新的ItemsSource?我认为这将是GridView在其ItemsSource重置时自动执行的操作。

代码语言:javascript
运行
复制
<ScrollViewer VerticalScrollBarVisibility="Auto">
    <ListView>
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Width="Auto" Header="Status">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Image Width="16" Height="16" Source="{Binding Path=Blocking}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Width="Auto" Header="Title">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</ScrollViewer>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-01 15:26:14

在更新ItemsSource后使用以下代码:

代码语言:javascript
运行
复制
public void AutoSizeGridViewColumns(ListView listView) 
{ 
    GridView gridView = listView.View as GridView; 
    if (gridView != null)
    { 
        foreach (var column in gridView.Columns)
        {
            if (double.IsNaN(column.Width))
                column.Width = column.ActualWidth; 
            column.Width = double.NaN; 
        } 
    } 
} 
票数 11
EN

Stack Overflow用户

发布于 2013-04-01 22:05:46

我已经创建了以下类,并在应用程序中需要的任何位置使用它来代替GridView

代码语言:javascript
运行
复制
/// <summary>
/// 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     
/// </summary>
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 column width was set to NaN already, set it ActualWidth temporarily and set to NaN. This raises the property change event and re computes the width.
            if (double.IsNaN(column.Width)) column.Width = column.ActualWidth;
            column.Width = double.NaN;              
        }            
        base.PrepareItem(item);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9078886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档