在另一个Scrollviewer中使用ScrollViewer

时间:2011-09-28 13:33:36

标签: wpf grid scrollviewer

我的wpf应用程序的结构如下:

<Scrollviewer>
   <Grid>
       <Scrollviewer>
            <DataGrid>

我的目标是,如果DataGrid超出屏幕高度,则使用它自己的Scrollviewer。在Moment只使用外部ScrollViewer,所以我必须滚动整个Grid。

有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:10)

您需要在内部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具有自己的ScrollBars的内置属性,您可以使用它而不是在ScrollViewer中包装DataGrid。这将滚动数据并始终保持标题可见,而不是滚动整个数据网格。

<DataGrid HorizontalScrollBarVisibility="Auto" 
          VerticalScrollBarVisibility="Auto" />

答案 1 :(得分:1)

您可能希望将DataGrid放在Scrollviewer之外。因此,您可以设置两个Grid.Rows,并让它为您分配可用的大小(默认为“相等”或如果您只使用两行,50%-50%)。因此,如果DataGrid超出其可用大小,它将使用自己的ScrollViewer。如果下面的内容超出了大小,它将使用您手动放置的ScrollViewer。至少,这就是我根据你的初始输入解决它的方式。随意添加代码/注释,以便我们找到更好的方法。

如果您将两个ScrollViewers加上一个数据网格放在彼此内部,那么如果您想要那种精细控制,您将被迫开始传递具体的高度或宽度值。