我想将一个DataGrid放在HeaderedContentControl中,但DataGrid没有得到一个垂直的Scrollbar。它看起来大小可以同时容纳所有行,底部从视图中消失。
如果我将相同的DataGrid放在Border elelemnt中,我会得到我想要的行为。
我把它简化为这个最小的例子:
<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>
一些注意事项:
答案 0 :(得分:6)
您看到此行为是因为HeaderedContentControl
的默认模板使用StackPanel
来显示其内容。由于StackPanel
占用其子项的大小,DataGrid
会扩展其高度,以使其所有项目都显示在屏幕上而不显示滚动条。然后,由于HeaderedContentControl
的大小,将裁剪显示。
更改模板以使用Grid
或DockPanel
解决了这个问题:
<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>