我有一个WPF UserControl,上面有两个网格 . 底部网格位于ScrollViewer中 . 我们的想法是让第一个Grid成为第二个Grid的 Headers . 但是我的列宽度有问题 . 两个网格都应该占用它们可以占用的所有空间(窗口的宽度),但顶部网格当然应该稍微宽一点,因为底部网格右侧有一个滚动条 .
这是我得到的简化Xaml:
<UserControl>
<DockPanel>
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
<ScrollViewer>
<Grid>
<Grid.ColumnDefintions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefintions>
</Grid>
</ScrollViewer>
</DockPanel>
</UserControl>
这实际上很好,除了顶部网格的最右边的列延伸到滚动条上,我想避免它 .
这是结果的图像:Grid column and width of scrollbar . 红色表示列/单元格现在的位置,但我希望它停在蓝线处 . 我已经尝试过SharedSizeGroups,但这似乎让我的网格再次变小(不占用窗口的整个空间) .
2 回答
问题是在ScrollViewer容器大小和网格大小之间 Build 正确的依赖关系 . 让我们只考虑宽度:上面的绑定允许ScrollViewer仅在必要时公开水平滚动条:
放大网格的单个列(例如,使用拆分器)不会引起其他列的大小调整(如果绑定
Width
而不是MinWidth
会发生这种情况) .使用
ViewportWidth
而不是ActualWidth
会考虑滚动条宽度(如果有的话) .试一试
找到解决方案here . 我给了我的热门
Grid
Width
: