我有一个网格有几个孩子,其中一个是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