У меня есть сетка с несколькими рядами. В верхней строке у меня есть ItemsControl, который динамически связан с коллекцией и использует DataTemplateSelector и ItemsPanelTemplate (с одним горизонтально расположенным WrapPanel). Вот урезанная версия того, что я имею до сих пор:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="2" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
Вместо того, чтобы устанавливать высоту первой строки равной 40, я бы хотел установить ее динамически на основе минимальной высоты, которой должен быть ItemsControl, чтобы соответствовать всему ее содержимому. Поскольку высота ItemsControl ограничена высотой строки сетки, я не могу понять, к какому элементу я должен быть привязан и к какому свойству элемента я должен его привязать.
Имеет смысл привязать высоту строки сетки к «желаемой высоте» ItemsControl. Итак, я нашел свойство DesiredSize и привязал высоту моего RowDefinition к DesiredSize.Height ItemsControl. Это работает при первой загрузке, но не обновляется при изменении размера элемента управления (помните, что я использую WrapPanel в качестве моего ItemsPanelTemplate, поэтому при изменении размера окна высота ItemsControl должна меняться).
Кто-нибудь знает, поддерживается ли такая ситуация даже инфраструктурой привязки, или мне нужно добавить код обработчика событий для этого?
Спасибо.