WPF: динамическая высота GroupBox



У меня есть текстовое поле и datagrid внутри dockpanel, который находится в групповом поле WPF.



<GroupBox Margin="8,142.04,1.783,230.4" Height="Auto" Header="Desired Meeting Outcomes (decisions or actions)?" MaxWidth="635" MinWidth="550" FontWeight="Bold" FontSize="13.333" BorderBrush="#FFD5DFE5" MinHeight="106" VerticalContentAlignment="Stretch">
<DockPanel Margin="0">
<local:TextboxControl Margin="0" d:LayoutOverrides="Height, HorizontalMargin" Width="538.217" VerticalAlignment="Top" HorizontalAlignment="Left" DockPanel.Dock="Top"/>
<local: Height="Auto" HorizontalAlignment="Left" MinHeight="25" MinWidth="538" DockPanel.Dock="Top"/>
</DockPanel>
</GroupBox>


Я добавляю строки в datagrid динамически из текстового поля, вызывая рост datagrid. Однако высота моего groupbox не растет динамично, хотя его высота установлена в Auto. Как я могу заставить свой групповой ящик расти и уменьшаться в зависимости от размера содержимого, которое он содержит?

567   2  

2 ответов:

У вас есть поля, установленные на всех 4 сторонах с вертикальным выравниванием растяжения. В сетке это в основном даст вам GroupBox, размеры которого совпадают с родительским, но не с его содержимым. Удалите поля справа и снизу и измените вертикальное выравнивание на верхнее.

Поля имеют порядок L, T, R, B. Поэтому обнулите последние два. Height=Auto и VerticalContentAlignment=Stretch-это значения по умолчанию, так что вы можете избавиться и от них. Постарайтесь сохранить XAML как можно более чистым.

Это из разметки следует, что вы используете Blend или конструктор Visual Studio. Я бы предложил использовать конструктор для режима "предварительного просмотра", а не редактирования. Хотя это стало намного лучше, я нахожу поведение макета дизайнера в обоих продуктах очень разочаровывающим. Знакомство с созданием XAML вручную приносит дивиденды в долгосрочной перспективе.

Пример

Согласно комментариям, я добавляю пример того, как у вас будет DataGrid, которая вызывает его родительские элементы автоматически расти в зависимости от высоты. Обратите внимание, что только само окно имеет фиксированный размер. Для окна, если вы хотите, чтобы оно росло на основе высоты, вы можете установить SizeToContent=Height. Обратите внимание, что вам нужно только установить VerticalAlignment=Top на самом внешнем элементе.

Главное окно.xaml

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Width="640" Height="480">
    <Grid x:Name="LayoutRoot" Background="Green" VerticalAlignment="Top">
        <Border Margin="5" BorderBrush="Yellow" BorderThickness="4">
            <GroupBox Header="Data Grid" Background="Orange">
                <DataGrid x:Name="dg" AutoGenerateColumns="True" />
            </GroupBox>
        </Border>
    </Grid>
</Window>

Главное окно.код XAML.cs

public partial class MainWindow : Window
{
    public MainWindow( )
    {
        InitializeComponent( );

        var items = new ObservableCollection<DateTime>( );
        dg.ItemsSource = items;

        var timer = new DispatcherTimer( );
        timer.Interval = TimeSpan.FromSeconds( 2 );
        timer.Tick += ( s, e ) => items.Add( DateTime.Now );
        timer.Start( );
    }
}

Что такое контейнер GroupBox ? Это может помешать ему расти.

Например, если контейнер является Windows, имеет ли он SizeToContent= "Height"?

Comments

    Ничего не найдено.