我的 WPF 应用程序结构如下:
<Scrollviewer>
<Grid>
<Scrollviewer>
<DataGrid>
我的目标是,如果DataGrid的高度超过屏幕高度,就使用它自己的滚动条。目前只使用外部的滚动条,所以我必须滚动整个网格。
请问有人能告诉我如何做到这一点吗?
<Scrollviewer>
<Grid>
<Scrollviewer>
<DataGrid>
我的目标是,如果DataGrid的高度超过屏幕高度,就使用它自己的滚动条。目前只使用外部的滚动条,所以我必须滚动整个网格。
请问有人能告诉我如何做到这一点吗?
你需要在内部的ScrollViewer上设置一个高度,否则它将根据其内容大小自动拉伸。
<Window x:Name="RootWindow">
<ScrollViewer>
<Grid Height="{Binding ElementName=RootWindow, Path=ActualHeight}">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="1">
<DataGrid />
</ScrollViewer>
</Grid>
</ScrollViewer>
</Window>
此外,DataGrid有内建的属性可用于自己的滚动条,您可以使用它们而不是将DataGrid包装在ScrollViewer中。这将滚动数据并始终保留标题可见,而不是滚动整个DataGrid。
<DataGrid HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto" />
你可能想把DataGrid放在ScrollViewer之外。因此,你可以设置两个Grid.Rows,并让它为你分配可用的大小(默认为“相等”,或者如果你只使用两行,则为50%-50%)。因此,如果DataGrid超出了其可用大小,它将使用自己的ScrollViewer。如果下面的内容超出了大小,它将使用你手动放置的ScrollViewer。至少,这是我根据你的初始输入解决问题的方式。请随意添加代码/注释,以便我们可以找到更好的方法。
如果你在彼此内部放置两个ScrollViewers和一个datagrid,你将被迫开始传递具体的高度或宽度值,如果你想要那种精细的控制。