带有星形列的 DataGrid 调整整个 DataGrid 的大小

Posted

技术标签:

【中文标题】带有星形列的 DataGrid 调整整个 DataGrid 的大小【英文标题】:DataGrid with Star column resizes entire DataGrid 【发布时间】:2011-11-18 06:20:54 【问题描述】:

我有一个包含两列的 WPF DataGrid;我希望第二列自动适应网格,所以我将其宽度设置为“*”。然而,在运行时,DataGrid 会调整到一个荒谬的宽度。

这是我删除了(我认为)无关控件和属性的基本标记:

<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <StackPanel>
                <DataGrid Name="MyGrid" AutoGenerateColumns="False"
                          CanUserAddRows="False" CanUserReorderColumns="False"
                          CanUserResizeColumns="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="Binding Field1"/>
                        <DataGridTextColumn Header="Column 2" Width="*" Binding="Binding Field2"/>
                    </DataGrid.Columns>
                </DataGrid>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>

我怀疑问题在于 ScrollViewer 中的 DataGrid。我尝试将 ScrollViewer 的宽度设置为 DataGrid 宽度:

Width="Bidning ElementName=MyGrid, Path=ActualWidth"

正如this post 中所建议的那样,但没有运气。我还尝试将 Horizo​​ntalScrollBarVisibility 设置为 Disabled,但随后一切都消失了(严重)。

我还应该提到所有这些都在一个 UserControl 中,它位于另一个 UserControl 中,然后位于 Window 中,这可能与所有“消失”有关(我怀疑宽度已经疯了,一切都“关闭”了窗口')。

【问题讨论】:

您使用的是 .Net 4.0 吗?我记得大约 2-3 周前关于同一主题的另一个帖子。我认为它被确定为 4.0 的一个错误,它在 3.5 中起作用。 是的,使用 .NET 4.0。如果这是重复的,如果有人能指出上一个问题,我将不胜感激。 我找了,没找到。查看 WPF 标签下并返回一条路径,您可能会找到它。 【参考方案1】:

尝试删除 DataGrid 之前的所有内容,以简化布局。 DataGrid 已经包含嵌入在其默认模板中的 ScrollViewer。另外,使用 StackPanel 您允许其子项填充所有可用空间 - StackPanel 会根据其内容的大小进行相应的拉伸。因此,您的DataGrid 可以无限延伸。

我还将 DataGrid 的 Name 属性更改为 x:Name,原因如下: In WPF, what are the differences between the x:Name and Name attributes?

<DataGrid 
    x:Name="MyGrid" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False"
    CanUserResizeColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="Binding Field1"/>
        <DataGridTextColumn Header="Column 2" Width="*" Binding="Binding Field2"/>
    </DataGrid.Columns>
</DataGrid>

【讨论】:

以上是关于带有星形列的 DataGrid 调整整个 DataGrid 的大小的主要内容,如果未能解决你的问题,请参考以下文章

打印20行10列的星形矩形

WPF DataGrid 同步列宽

禁用 WPF MVVM 中 DataGrid 中自动生成的列的排序

EasyUI:datagrid数据汇总

如何保存 WPF UI 状态?

请问谁有JSP easyui datagrid 的自定义显示列的实例呀,就是显示出来的字段用户可以自己定义