Подтвердить что ты не робот

Свяжите высоту строки сетки с содержимым в WPF

У меня есть сетка с несколькими строками. В верхнем ряду у меня есть элемент 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 должна меняться).

Кто-нибудь знает, поддерживается ли такая ситуация картой привязки, или мне нужно добавить код обработчика событий, чтобы выполнить это?

Спасибо.

4b9b3361

Ответ 1

Вы пытались установить высоту в Auto для достижения желаемого результата:

<RowDefinition Height="Auto"/>

(или я думаю слишком просто здесь??)