У меня есть текстовое поле и 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 dynmaically от текстового поля, заставляющего datagrid вырасти. Однако высота моего группового блока не растет динамично даже при том, что ее высота установлена на Автоматический. Как я могу заставить свой групповой блок расти и уменьшаться основанный на размере содержания, которое он содержит?
У вас есть поля со всех 4 сторон с помощью VerticalAlignment of Stretch. В Grid это в основном даст вам GroupBox, размер которого совпадает с размером его родительского элемента, но не с его содержимым. Удалите поля справа и снизу и измените VerticalAlignment на Top.
Поля - это порядок L, T, R, B. Итак, обнулите последние два. Height = Auto и VerticalContentAlignment = Stretch являются значениями по умолчанию, поэтому вы также можете избавиться от них. Постарайтесь сохранить XAML как можно более чистым.
Из разметки ясно, что вы используете Blend или конструктор Visual Studio. Я бы посоветовал использовать конструктор для режима «предварительного просмотра», а не для редактирования. Хотя он стал намного лучше, я считаю, что поведение дизайнера в обоих продуктах очень расстраивает. Знакомство с созданием XAML вручную приносит дивиденды в долгосрочной перспективе.
ПРИМЕР
Согласно комментариям, я добавляю пример того, как у вас будет DataGrid, который заставляет свои родительские элементы автоматически увеличиваться в зависимости от высоты. Обратите внимание, что только само окно имеет фиксированный размер. Для окна, если вы хотите, чтобы оно увеличивалось в зависимости от высоты, вы можете установить SizeToContent = Height. Обратите внимание, что вам нужно установить VerticalAlignment = Top только для самого внешнего элемента.
MainWindow.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>
MainWindow.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"?