数据网格列宽度自适应单元格内容

3

I have this XAML code:

<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>

数据网格填充有包含一些虚拟值的对象,用于测试目的。软件名称列中的前几个条目具有相当短的字符串(约10个字符)。在底部,我添加了一个大字符串(约60个字符)。
我希望单元格在应用程序启动时具有该列中最大字符串的宽度。当前,当我启动它时,宽度是可见的最大字符串的大小,在我的数据网格中。只有当我滚动到底部时,数据网格和窗口才会调整为大的60个字符的宽度。
我尝试过使用“Width =”SizeToContent“”或“SizeToCells”,但似乎没有任何方法可以使数据网格在应用程序启动后具有正确的大小。请问有人能指点我吗?
谢谢任何帮助!
1个回答

4
好的,DataGrid默认启用了行虚拟化,因此最初只创建可见行对象,并且网格本身仅知道当前可见单元格大小:

EnableRowVirtualization 属性设置为 true 时,DataGrid 不会为绑定数据源中的每个数据项实例化一个 DataGridRow 对象。相反,只有在需要时,DataGrid 才会创建 DataGridRow 对象...

如果您的 DataGrid 不是很大,则最简单的解决方案就是将 EnableRowVirtualization="False",则尺寸调整将从开始起作用。


问题立即解决了!非常感谢你的解释。我以前不知道RowVirtualization。 - sevi
1
@sev,很高兴能帮到你,愿你编程愉快 =) - icebat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接