如何在 uwp 的 scrollviewer 中获得从底部到顶部的垂直偏移?

How to get vertical offset from bottom to top in scrollviewer in uwp?

我希望 scrollviewer 在 uwp 中从下到上垂直偏移而不是从上到下因为它只显示从上到下当我从顶部增加应用程序的高度它不会工作但是当我降低应用程序的高度时它会起作用......请帮助我。

这是我的代码

double getvalue = scrollviewer.verticaloffset;
textblock.Text = getvalue.ToString();

获得价值但是当我增加应用程序的高度时它不起作用但是当我降低应用程序的高度时它显示一些价值。

当滚动条在顶部时它不会给出值.................................请帮助我.

小伙伴们这里有一些截图

Image 1

如图1所示,app处于正常状态。

Image 2

当应用 window 高度较小时,您可以在图 2 中看到。

Image 3

正如您在图 3 中看到的那样,当我向上滚动时它显示了按钮。

Image 4

如图4所示,当我增加应用程序的高度时,它并没有消失。

Image 5

如图 5 所示,当我降低 App 的高度时,它就消失了。

伙计们,你们能帮我实现这个功能吗

根据图片和您的描述,我认为您的目的是创建一个按钮,用于让 ScrollViewer 滚动到顶部。问题是当你向上或向下滚动栏或调整 window 的大小时,当 ScrollViewer’s 内容不在底部时如何让按钮显示,并在 ScrollViewer’s 时隐藏按钮] 当您向上或向下滚动栏或调整 window.

大小时,内容不在底部

可以使用VerticalOffset property which represents the distance the content has been scrolled vertically and ViewportHeight property which represents the vertical size of the viewable content and ExtentHeight 属性表示ScrollViewer中所有可滚动内容的垂直尺寸,来判断ScrollViewer中的内容是否达到底.

请检查以下代码作为示例:

//MainPage.xaml
<Grid SizeChanged="Grid_SizeChanged">
    <ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Visible" VerticalScrollMode="Enabled"
                  ViewChanged="scrollViewer_ViewChanged">
        <StackPanel x:Name="stackPanel" Background="LightGray">
            <TextBlock Text="0" Margin="20"/>
            <TextBlock Text="1" Margin="20"/>
            <TextBlock Text="2" Margin="20"/>
            <TextBlock Text="3" Margin="20"/>
            <TextBlock Text="4" Margin="20"/>
            <TextBlock Text="5" Margin="20"/>
            <TextBlock Text="6" Margin="20"/>
            <TextBlock Text="7" Margin="20"/>
            <TextBlock Text="8" Margin="20"/>
            <TextBlock Text="9" Margin="20"/>
            <TextBlock Text="10" Margin="20"/>
            <TextBlock Text="11" Margin="20"/>
            <TextBlock Text="12" Margin="20"/>
    </StackPanel>
    </ScrollViewer>

    <Button x:Name="BackButton" Content="top" Click="BackButton_Click" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</Grid>

//MainPage.xaml.cs
private void BackButton_Click(object sender, RoutedEventArgs e)
{
    //The code is used to scroll to the top
    scrollViewer.ChangeView(null, 0, null);

    //the code is used to scroll to the bottom
    //scrollViewer.ChangeView(null, scrollViewer.ExtentHeight-scrollViewer.ViewportHeight, null);
}

private void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    var verticalOffset = scrollViewer.VerticalOffset;
    var extentHeight = scrollViewer.ExtentHeight;
    var viewportHeight = scrollViewer.ViewportHeight;
    if (viewportHeight + verticalOffset == extentHeight)
    {
        BackButton.Visibility = Visibility.Collapsed;
    }
    else
    {
        BackButton.Visibility = Visibility.Visible;
    }
}

private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    var verticalOffset = scrollViewer.VerticalOffset;
    var extentHeight = scrollViewer.ExtentHeight;
    var viewportHeight = scrollViewer.ViewportHeight;
    if (viewportHeight + verticalOffset == extentHeight)
    {
        BackButton.Visibility = Visibility.Collapsed;
    }
    else
    {
        BackButton.Visibility = Visibility.Visible;
    }
}

如果您有任何其他问题,请随时与我联系。