Sie haben Ränder auf allen 4 Seiten mit einer VerticalAlignment of Stretch. In einem Grid gibt dies Ihnen im Grunde eine GroupBox, die mit ihren Eltern, aber nicht mit ihrem Inhalt sortiert. Entfernen Sie den Rand von rechts und unten und ändern Sie die vertikale Ausrichtung nach oben.
Die Ränder sind die Reihenfolge von L, T, R, B. Null also die letzten zwei. Height = Auto und VerticalContentAlignment = Stretch sind die Standardwerte, so dass Sie diese auch loswerden können. Versuchen Sie, den XAML so sauber wie möglich zu halten.
Aus dem Markup wird deutlich, dass Sie den Designer von Blend oder Visual Studio verwenden. Ich würde vorschlagen, den Designer für den "Vorschau" -Modus zu verwenden, anstatt ihn zu bearbeiten. Obwohl es viel besser geworden ist, finde ich das Layoutverhalten des Designers in beiden Produkten sehr frustrierend. Wenn Sie sich mit der manuellen Erstellung von XAML vertraut machen, zahlt sich das auf lange Sicht aus.
Beispiel
du nach den Kommentaren, ich hinzufüge, ein Beispiel, wie Sie einen Datagrid haben würden, die automatisch ihre Mutterelemente bewirkt, basierend auf der Höhe wachsen. Beachten Sie, dass nur das Fenster selbst eine feste Größe hat. Wenn Sie das Fenster für ein Fenster auf der Grundlage der Höhe vergrößern möchten, können Sie SizeToContent = Height festlegen. Beachten Sie, dass Sie VerticalAlignment = Top nur auf dem äußersten Element festlegen müssen.
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();
}
}
so toll gearbeitet und ich war in der Lage, dies zu dem Rest der Kontrollen im Netz anzuwenden. Ich habe jedoch noch eine Frage an dich. Das LayoutRoot für meine GroupBox ist ein Grid. Gerade jetzt, wenn meine GroupBox zu groß ist, wird der Boden vom LayoutRoot abgeschnitten. Ich versuche, meine gesamte wpf Größe basierend auf Inhalten zu ändern. Ich habe versucht, die gleiche Logik für die Groupbox anzuwenden, aber es funktioniert nicht. –
Mein UserControl wird in einem Formular gehostet, das eine angrenzende Region des E-Mail-Formulars von Outlook ist. Muss ich einen Trigger setzen, wenn sich die Höhe des Benutzersteuerelements ändert? –
Ja, eine Outlook-Region wird nicht automatisch skaliert. Sie müssen Ereigniscode verwenden, um das synchron zu halten. – Josh