我有一个在代码隐藏中设置ItemsSource的GridView。网格中的所有列都是用XAML定义的,并且所有的列宽都是"Auto“。当我最初设置网格的ItemsSource时,列宽设置正确。
现在,根据用户的操作,可以将网格的ItemsSource设置为新的EntityCollection。我注意到的是,列宽与前一个ItemsSource的列宽相同。也就是说,当为网格设置新的ItemsSource时,列宽似乎不会自动调整。在代码隐藏或XAML中,有没有办法强制网格在设置列宽时使用新的ItemsSource?我认为这将是GridView在其ItemsSource重置时自动执行的操作。
<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>发布于 2012-02-01 15:26:14
在更新ItemsSource后使用以下代码:
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;
}
}
} 发布于 2013-04-01 22:05:46
我已经创建了以下类,并在应用程序中需要的任何位置使用它来代替GridView
/// <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);
}
}https://stackoverflow.com/questions/9078886
复制相似问题