我有一個網格有幾個孩子,其中一個是ScrollViewer。我希望網格根據其所有子項調整大小,但除了 ScrollViewer外,我想只佔用通過爲其他子項調整網格大小創建的空間。 (例如,網格爲2 x 2,滾動查看器位於第0行0列,因此其他三個網格條目足以確定網格的尺寸。)確定大小時,使WPF/SL網格忽略子元素
有沒有一種很好的方法可以做到這一點?我研究過創建一個自定義面板來替換網格或者包含ScrollViewer,但是在MeasureOverride/ArrangeOverride調用期間,我是否會收到一個調用,它可以告訴我關於網格行的最終寬度/高度/我關心的列(例如,第0行,第0列)。
我想過的一個想法是從網格中派生出來並調用基礎MeasureOverride/ArrangeOverride,但是在調用之前從調用之前(並將它放回)之後從網格的子節點中移除ScrollViewer,但在佈局過程中與可視化樹相混淆計算似乎是一個壞主意。
下面是一個例子:
<Grid x:Name="LayoutRoot" Background="White">
<Grid VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Row="0" Grid.Column="0" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
<Button Height="300" Width="300"/>
</ScrollViewer>
<Button Grid.Row="1" Grid.Column="0" Height="100" Width="100" Content="1,0"/>
<Button Grid.Row="0" Grid.Column="1" Height="100" Width="100" Content="0,1"/>
<Button Grid.Row="1" Grid.Column="1" Height="100" Width="100" Content="1,1"/>
</Grid>
</Grid>
我想網格的大小,而不是在ScrollViewer中按鈕的大小變化而變化 - 例如,我想網格給予ScrollViewer中的100×100平方這是由網格內容的其餘部分決定的。如果我將3個100x100按鈕中的每一個都更改爲200x200,我希望ScrollViewer獲得200x200等等。
Pavlo的示例使我與目前最接近,Grid行/列大小適當,但ScrollViewer的確不適應調用Arrange時給定的大小。請看下圖:
請提供一個XAML的例子,它很難準確理解你需要什麼。 – danbord 2011-01-31 17:51:00
當然,好點。我剛剛加了一個。 – aggieNick02 2011-01-31 18:19:53