2011-01-29 38 views
3

我有一个WPF UserControl与两个网格上面彼此。底部网格位于ScrollViewer中。这个想法是让第一个Grid成为第二个Grid的头部。但是,我在列的宽度上遇到了问题。两个网格都应占用所有可能的空间(窗口的宽度),但顶部网格当然应该宽一些,因为底部网格右侧有一个滚动条。给一个WPF网格的ScrollViewer的宽度减去滚动条

这是简化的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,但这似乎使我的网格再次变小(不占用窗口的整个空间)。

回答

1

找到解决方案here。我给我顶Grid一个Width

Width="{Binding ElementName=BottomGrid, Path=ActualWidth}" 
5
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Name="sv"> 
    <Grid MinWidth="{Binding ElementName=sv, Path=ViewportWidth}" MinHeight="{Binding ElementName=sv, Path=ViewportHeight}" /> 
</ScrollViewer> 

问题是建立ScrollViewer中容器的大小和网格尺寸之间的正确依赖。让我们考虑宽度:上面的绑定允许ScrollViewer仅在必要时才暴露水平滚动条:

放大网格的单列(例如,使用分离器)不会引起其他列的大小调整(如果你绑定Width而不是MinWidth)。

使用ViewportWidth而不是ActualWidth考虑了滚动条宽度(如果有的话)。

只需尝试

+0

你能解释为什么这个答案有效或有用吗? – 2016-03-25 17:22:44