DataGrid 列大小宽度适合单元格内容
DataGrid column size width fit to cell content
我有这个 XAML 代码:
<Window>
<Grid Name="gridBase" Width="Auto" Height="Auto">
<DataGrid Grid.Row="1" DataContext="{StaticResource ItemCollectionViewSource}" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" Name="dgPatchContent" Margin="10, 20, 10, 10" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding SoftwareName}" Header="Software Name" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Stopped, UpdateSourceTrigger=PropertyChanged}" Header="Stopped" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_New, UpdateSourceTrigger=PropertyChanged}" Header="New" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Pilot, UpdateSourceTrigger=PropertyChanged}" Header="Pilot" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Productive, UpdateSourceTrigger=PropertyChanged}" Header="Prod" MinWidth="55" CanUserResize="False" />
</DataGrid.Columns>
</DataGrid>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2" Orientation="Horizontal">
<Button Content="OK" MinWidth="80" Margin="10,10,10,10" />
<Button Content="Cancel" MinWidth="80" Margin="0,10,10,10" />
</StackPanel>
</Grid>
</Window>
DataGrid 充满了对象,其中包含一些用于测试目的的虚拟值。 SoftwareName 列中的前几个条目具有相当短的字符串(~10 个字符)。在底部,我添加了一个大字符串(约 60 个字符)。
我想让单元格在应用程序启动时具有该列中最大字符串的宽度。目前,当我启动它时,宽度是我 DataGrid
中可见的最大字符串的大小。只有当我滚动到底部时,DataGrid
和 Window 才会调整到 60 字符大字符串的宽度。
我试过 Width="SizeToContent"
或“SizeToCells
”,但在应用程序启动后似乎无法使 DataGrid
具有正确的大小。有人能给我指出正确的方向吗?
感谢您的帮助!
好吧,DataGrid
默认启用 row virtualization,因此最初只创建可见的行对象,并且网格本身只知道当前可见的单元格大小:
When the EnableRowVirtualization property is set to true, the DataGrid
does not instantiate a DataGridRow object for each data item in the
bound data source. Instead, the DataGrid creates DataGridRow objects
only when they are needed...
如果您的 DataGrid
不是很大,那么最简单的解决方案就是设置 EnableRowVirtualization="False"
,然后尺寸将从一开始就起作用。
我有这个 XAML 代码:
<Window>
<Grid Name="gridBase" Width="Auto" Height="Auto">
<DataGrid Grid.Row="1" DataContext="{StaticResource ItemCollectionViewSource}" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" Name="dgPatchContent" Margin="10, 20, 10, 10" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding SoftwareName}" Header="Software Name" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Stopped, UpdateSourceTrigger=PropertyChanged}" Header="Stopped" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_New, UpdateSourceTrigger=PropertyChanged}" Header="New" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Pilot, UpdateSourceTrigger=PropertyChanged}" Header="Pilot" MinWidth="55" CanUserResize="False" />
<DataGridCheckBoxColumn Binding="{Binding AssignmentStatus_Productive, UpdateSourceTrigger=PropertyChanged}" Header="Prod" MinWidth="55" CanUserResize="False" />
</DataGrid.Columns>
</DataGrid>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2" Orientation="Horizontal">
<Button Content="OK" MinWidth="80" Margin="10,10,10,10" />
<Button Content="Cancel" MinWidth="80" Margin="0,10,10,10" />
</StackPanel>
</Grid>
</Window>
DataGrid 充满了对象,其中包含一些用于测试目的的虚拟值。 SoftwareName 列中的前几个条目具有相当短的字符串(~10 个字符)。在底部,我添加了一个大字符串(约 60 个字符)。
我想让单元格在应用程序启动时具有该列中最大字符串的宽度。目前,当我启动它时,宽度是我 DataGrid
中可见的最大字符串的大小。只有当我滚动到底部时,DataGrid
和 Window 才会调整到 60 字符大字符串的宽度。
我试过 Width="SizeToContent"
或“SizeToCells
”,但在应用程序启动后似乎无法使 DataGrid
具有正确的大小。有人能给我指出正确的方向吗?
感谢您的帮助!
好吧,DataGrid
默认启用 row virtualization,因此最初只创建可见的行对象,并且网格本身只知道当前可见的单元格大小:
When the EnableRowVirtualization property is set to true, the DataGrid does not instantiate a DataGridRow object for each data item in the bound data source. Instead, the DataGrid creates DataGridRow objects only when they are needed...
如果您的 DataGrid
不是很大,那么最简单的解决方案就是设置 EnableRowVirtualization="False"
,然后尺寸将从一开始就起作用。