DataGrid没有推卸到适合包含的网格

时间:2011-02-02 19:35:16

标签: wpf datagrid grid

我的WPF应用程序中有以下结构。 (使用棱镜和区域)

窗口---->     用户控件---->     DockPanel中------>         网格(2X2)------> Row0Col0--                   网格(2X1)------>             ItemsControl的------>                 UserControl(用Prism注入ItemsControl)----->                     DockPanel中----->                         DataGrid。(60行,10列)

我期望的行为是DataGrid将自己调整大小以适应网格单元的大小并显示两个滚动条,因为它太大而不适合。但它没有。它仍保持最大尺寸,并切除网格单元的边缘。两个网格的所有单元格都没有尺寸规格(自动调整大小)。当我明确指定datagrid的高度和宽度时,我会看到滚动条,但我当然不希望这样做。

请帮忙! 感谢

我已在以下链接保存了屏幕截图。 http://s1199.photobucket.com/albums/aa467/vikasgoyalgzs/

1 个答案:

答案 0 :(得分:3)

你说:“两个网格的所有单元格都没有尺寸规格(自动尺寸)” - 这就是问题所在。当grid单元格的大小为auto时,grid会为该单元格中的内容提供所需的空间(如果它适合窗口,则无关紧要)。要解决此问题,您必须将DataGrid放入星形大小的单元格中。

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

   <Border Grid.Row="0">
     <!-- Content that will take as much space as it wants -->
   </Border>

   <Border Grid.Row="1">
     <!-- Content that will take all the remaining space -->
   </Border>
</Grid>

更新:根据您提供的屏幕截图...

首先,摆脱顶级控件中的DockPanelDockPanel为孩子提供了所要求的所有空间。如果它不是“填充”孩子(LastChildFill="True")。使用grid代替DockPanel(即在顶级grid有两行 - 一个用于菜单自动调整大小,另一个用于其他内容的星号大小,在那个星号行中为你的物品控件等放了另一个grid

请注意,无论何时将内容放在网格中的自动调整大小的单元格中,或者在DockPanel中,停靠类型不同于Fill,内容都会占用所需的空间。显示滚动条(它将超出窗口)。

更新2 :查看新的屏幕截图(请参阅此帖子的评论)...

好的,我想我看到了问题。问题在于ItemsControl使用StackPanel来显示其子项,但StackPanel也为其子项提供了他们想要的所有空间(您的DataGrid认为它有足够的空间来呈现本身没有滚动条。)

要解决此问题,您需要将项目控件放在ScrollViewer中,如下所示:

<ScrollViewer VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Auto">
    <ItemsControl ... />
</ScrollViewer>