我的WPF应用程序中有以下结构。 (使用棱镜和区域)
窗口----> 用户控件----> DockPanel中------> 网格(2X2)------> Row0Col0-- 网格(2X1)------> ItemsControl的------> UserControl(用Prism注入ItemsControl)-----> DockPanel中-----> DataGrid。(60行,10列)
我期望的行为是DataGrid将自己调整大小以适应网格单元的大小并显示两个滚动条,因为它太大而不适合。但它没有。它仍保持最大尺寸,并切除网格单元的边缘。两个网格的所有单元格都没有尺寸规格(自动调整大小)。当我明确指定datagrid的高度和宽度时,我会看到滚动条,但我当然不希望这样做。
请帮忙! 感谢
我已在以下链接保存了屏幕截图。 http://s1199.photobucket.com/albums/aa467/vikasgoyalgzs/
答案 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>
更新:根据您提供的屏幕截图...
首先,摆脱顶级控件中的DockPanel
。 DockPanel
为孩子提供了所要求的所有空间。如果它不是“填充”孩子(LastChildFill="True"
)。使用grid
代替DockPanel
(即在顶级grid
有两行 - 一个用于菜单自动调整大小,另一个用于其他内容的星号大小,在那个星号行中为你的物品控件等放了另一个grid
。
请注意,无论何时将内容放在网格中的自动调整大小的单元格中,或者在DockPanel
中,停靠类型不同于Fill
,内容都会占用所需的空间。显示滚动条(它将超出窗口)。
更新2 :查看新的屏幕截图(请参阅此帖子的评论)...
好的,我想我看到了问题。问题在于ItemsControl
使用StackPanel
来显示其子项,但StackPanel
也为其子项提供了他们想要的所有空间(您的DataGrid
认为它有足够的空间来呈现本身没有滚动条。)
要解决此问题,您需要将项目控件放在ScrollViewer
中,如下所示:
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<ItemsControl ... />
</ScrollViewer>