【问题标题】:DataGrid column size width fit to cell contentDataGrid 列大小宽度适合单元格内容
【发布时间】:2015-04-21 13:48:02
【问题描述】:

我有这个 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 才会调整为 60char 大字符串的宽度。

我玩过Width="SizeToContent" 或“SizeToCells”,但在应用程序启动后似乎没有什么能使DataGrid 具有正确的大小。有人能指出我正确的方向吗?

感谢您的帮助!

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    好吧,DataGrid 默认启用了row virtualization,所以最初只创建可见行对象,而网格本身只知道当前可见单元格的大小:

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

    如果您的DataGrid 不是很大,那么最简单的解决方案就是设置EnableRowVirtualization="False",然后大小将从一开始就起作用。

    【讨论】:

    • 立即解决了问题!非常感谢您的解释。我不知道 RowVirtualization。
    • @sev,很高兴它有帮助,玩得开心编码 =)
    猜你喜欢
    • 2012-07-01
    • 2012-08-29
    • 2011-03-25
    • 2014-07-30
    • 2019-05-10
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多