如何使WPF数据网格填满所有可用空间并随窗口调整大小?

29
如何使WPF数据网格填充所有可用空间并随窗口调整大小?请注意,数据网格位于网格内。

展示你的代码。根据 code,你的父网格也必须正确设置。 - Brock Hensley
根据@dirt的请求,请展示代码。通常情况下,我不会使用 Grid,因为这个特定原因。每当我需要动态调整大小时,我使用 DockPanelStackPanel 来排列我的控件。它提供了很多灵活性,因为 DockPanel 会用最后定义的逻辑子项填充可用空间。 - Sandesh
5个回答

32

通过将HorizontalAlignmentVerticalAlignment设置为Stretch,您应该能够对数据网格(或任何WPF控件)执行此操作。

如果它在Grid中,您应该能够设置类似于这样的内容

<Grid> <!-- parent grid or whatever -->
   <DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ... >
   </DataGrid>
</Grid>

3
您可能还希望在您的窗口控件上设置 SizeToContent="WidthAndHeight" - Shahin Dohan
1
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"声明是无用的,因为Stretch是默认值。 - Orace

11
  1. 永远不要将其或其父控件的高度或宽度设置为固定值
  2. 无需担心水平和垂直对齐,因为默认情况下水平和垂直对齐方式是拉伸。 如果上述都正确,那么应该可以正常工作 :)

4

将DataGrid的最后一列宽度设置为*。

<DataGridTextColumn Header="Notes"
                    Binding="{Binding Notes}"
                    Width="*"/>

注意:这仅适用于DataGrid的最后一列。

星号 * 是宽度的无效输入。 - Mohamed Kamel Bouzekria
1
@MohamedKamelBouzekria,那它为什么能完全按照我的意愿执行呢? - Terry Tyson
@MohamedKamelBouzekria,感谢您的编辑,现在很有意义。 - Terry Tyson

2

请删除父控件的所有高度和宽度属性,删除水平和垂直属性。将行高定义为其父网格的*。

<Grid> 
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
   <DataGrid Grid.Row="0" >
   </DataGrid>
</Grid>

3
这不是一个网格(Grid),而是一个数据网格(DataGrid)。 - Xav987
数据网格位于网格中。 - Jeff

-1
直接将DataGrid插入到网格中,无需使用面板包装。
    <Grid>
       <DataGrid>
       </DataGrid>
    </Grid>

这样做不会起作用,因为DataGrid将使用其所需的所有空间,而不是填充所有可用空间。 - Mohamed Kamel Bouzekria
1
具有讽刺意味的是,这是正确的答案。 - Orace

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