2011-01-29 70 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