WPF Datagrid vertikale Dimensionierung
-
28-09-2019 - |
Frage
Ich möchte ein Datagrid in einem HeaderedContentControl platzieren, aber das Datenraster nicht eine vertikale Scrollbar bekommen. Es scheint, alle Zeilen bemessen zu sein, auf einmal aus dem Blickfeld, den Boden verschwindenden zu halten.
Wenn ich die gleiche Datagrid in einem Grenzort elelemnt ich das Verhalten bekommen ich will.
Ich habe es auf dieses minimal Beispiel reduziert:
<Grid>
<HeaderedContentControl Margin="10,10,10,161" >
<HeaderedContentControl.Header >test</HeaderedContentControl.Header>
<!-- I want it Here but then no Vertical Scroll-->
<DataGrid ItemsSource="{Binding Path=AllData}"
AutoGenerateColumns="True" />
</HeaderedContentControl>
<Border Margin="10,169,10,10">
<!--Here it does scroll -->
<DataGrid ItemsSource="{Binding Path=AllData}"
AutoGenerateColumns="True" />
</Border>
</Grid>
Ein paar Anmerkungen:
- Ich kann es nicht zur Arbeit mit HeaderedContentControl.VerticalContentAlignment bekommen
- wird dieses Problem im Zusammenhang dieser Frage aber ich denke, ich habe erweitert es ein wenig, und dass es eine bessere Antwort.
- mit einem Scroll um das Datagrid ist keine Lösung, weil es den Header aus den Augen rollt.
- Ich verwende WPF4
Lösung
Sie sehen diese Verhalten, weil die Standardvorlage für HeaderedContentControl
eine StackPanel
mit seinem Inhalt zu zeigen. Da die StackPanel
die Größe seiner Kinder nimmt, dehnt sich die DataGrid
seine Höhe auf dem Bildschirm ohne Scrollbalken gezeigt jedes seiner Elemente zu haben. Die Anzeige wird dann aufgrund der Größe der HeaderedContentControl
abgeschnitten.
die Vorlage Ändern ein Grid
zu verwenden oder ein DockPanel
löst dieses Problem:
<Style TargetType="{x:Type HeaderedContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<DockPanel>
<ContentPresenter DockPanel.Dock="Top" ContentSource="Header" />
<ContentPresenter />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>