У меня есть Grid с несколькими дочерними элементами, одним из которых является ScrollViewer. Я хочу, чтобы размер сетки определялся на основе всех его дочерних элементов , за исключением ScrollViewer, который я хочу просто занять пространство, которое создается путем определения размера сетки для остальных дочерних элементов. (Например, Grid имеет размер 2x2, а ScrollViewer находится в строке 0, столбце 0, и поэтому для определения размеров сетки достаточно трех других элементов таблицы.)
Есть хороший способ сделать это? Я рассмотрел создание пользовательской панели для замены Grid или для включения ScrollViewer, но ни при каких обстоятельствах во время вызовов MeasureOverride / ArrangeOverride я не получаю вызов, который может сказать мне об окончательной ширине / высоте строки сетки / столбец, который мне небезразличен (например, строка 0, столбец 0).
Одна мысль, которая у меня возникла, состояла в том, чтобы извлечь из Grid и вызвать базовый MeasureOverride / ArrangeOverride, но удалить ScrollViewer из дочерних элементов Grid прямо перед вызовом (и вернуть его после), но возиться с визуальным деревом во время вычисления макета кажется плохой идеей.
Вот пример:
<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 квадрат 100x100, который определяется остальным содержимым сетки. И если бы я изменил каждую из 3 кнопок 100x100 на 200x200, я бы хотел, чтобы ScrollViewer получал 200x200 и т. Д.
Пример Павла пока что приближает меня к нему: строки / столбцы таблицы имеют соответствующий размер, но ScrollViewer не адаптируется к заданному размеру при вызове Arrange. Смотрите ниже:
