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. Как я могу заставить свой групповой ящик расти и уменьшаться в зависимости от размера содержимого, которое он содержит?
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