У меня есть сетка с несколькими строками. В верхнем ряду у меня есть элемент 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 ограничивается высотой Grid Row, я не могу понять, какой элемент я должен быть привязан и к какому свойству элемента я должен привязывать его.
Было бы целесообразно связать высоту сетки с "желаемой высотой" элемента ItemsControl. Итак, я нашел свойство DesiredSize и связал свою высоту RowDefinition с элементом ItemsControl DesiredSize.Height. Это работает, когда он сначала загружается, но не обновляется при изменении размера элемента управления (помните, что я использую WrapPanel в качестве элемента ItemsPanelTemplate, так как я изменяю размер окна, высота элемента ItemsControl должна меняться).
Кто-нибудь знает, поддерживается ли такая ситуация картой привязки, или мне нужно добавить код обработчика событий, чтобы выполнить это?
Спасибо.