У вас есть поля, установленные со всех 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( );
}
}
person
Josh
schedule
27.02.2010