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

Размер управления Wpf для контента?

Как заставить элемент управления WPF изменять его размер в соответствии с содержимым в нем?

4b9b3361

Ответ 1

Для большинства элементов управления вы устанавливаете высоту и ширину в Auto в XAML, и размер будет соответствовать его содержимому.

В коде вы устанавливаете ширину/высоту на double.NaN. Подробнее см. FrameworkElement.Width, в частности раздел "Замечания".

Ответ 2

У меня была такая проблема, когда я указал ширину моего окна, но имел высоту, равную Auto. Ребенок DockPanel установил для него VerticalAlignment значение "Верх", а в окне было установлено значение "Вертикальное соответствие" для Версии, но Окно все равно будет намного выше, чем содержимое.

Используя Snoop, я обнаружил, что ContentPresenter внутри Window (часть окна, а не то, что я там положил) имеет VerticalAlignment, установленный в Stretch и не может быть изменен без повторного просмотра всего окна

После многих разочарований я обнаружил свойство SizeToContent - вы можете использовать это, чтобы указать, хотите ли вы, чтобы Окно имел размер по вертикали, по горизонтали или по обоим, в зависимости от размера содержимого - теперь все красиво оформляется, Я просто не могу поверить, что мне потребовалось столько времени, чтобы найти эту собственность!

Ответ 3

Если вы используете сетку или аналогичный компонент: В XAML убедитесь, что в элементах сетки определены Grid.Row и Grid.Column, и убедитесь, что они не имеют полей. Если вы использовали режим дизайнера или Expression Blend, он мог бы назначать поля по отношению ко всей сетке, а не к определенным ячейкам. Что касается размера ячейки, я добавляю дополнительную ячейку, которая заполняет остальную часть пространства:

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

Ответ 4

У меня был пользовательский элемент управления, который сидел на странице в свободной форме, а не ограничивался другим контейнером, а содержимое в пользовательском элементе не было автоматически изменено, а расширялось до полного размера того, что было передано пользователем.

Чтобы пользовательский элемент управления мог просто размер его содержимого, только для высоты, я поместил его в сетку с строкой, установленной для автоматического размера, например:

<Grid Margin="0,60,10,200">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <controls1:HelpPanel x:Name="HelpInfoPanel"
                         Visibility="Visible"
                         Width="570"
                         HorizontalAlignment="Right"
                         ItemsSource="{Binding HelpItems}"
                         Background="#FF313131" />
</Grid>