带有星形列的 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 中所建议的那样,但没有运气。我还尝试将 HorizontalScrollBarVisibility 设置为 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 的大小的主要内容,如果未能解决你的问题,请参考以下文章