簡體   English   中英

如何在 uwp 的滾動查看器中從底部到頂部垂直偏移?

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

我希望在 uwp 中從下到上而不是從上到下的滾動查看器垂直偏移,因為當我從頂部增加應用程序的高度時它只顯示從上到下,但當我降低應用程序的高度時它會工作.. .............請幫我。

這是我的代碼

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

獲得價值但是當我增加應用程序的高度時它不起作用但是當我降低應用程序的高度時它顯示出一些價值。

當滾動條位於頂部時,它不會給出價值..........................請幫助我。

伙計們這里有一些截圖

圖 1

正如您在圖 1 中看到的,當應用程序處於正常 state 時。

圖 2

正如您在圖 2 中看到的,當應用程序 window 高度較小時。

圖 3

正如您在圖 3 中看到的那樣,當我向上滾動時,它會顯示 Button。

圖 4

正如您在圖 4 中看到的,當我增加 App 的高度時,它並沒有消失。

圖 5

正如您在圖 5 中看到的那樣,當我降低 App 的高度時,它就會消失。

所以伙計們,你能幫我實現這個功能嗎

根據圖像和您的描述,我認為您的目的是創建一個按鈕,用於讓ScrollViewer滾動到頂部。 問題是當您向上或向下滾動條或調整 window 的大小時,如何讓按鈕顯示時ScrollViewer's內容不在底部,並且當您向上或向下滾動時,當ScrollViewer's內容不在底部時隱藏按鈕向下欄或調整 window 的大小。

您可以使用表示內容垂直滾動距離的VerticalOffset屬性和表示可查看內容的垂直大小的ViewportHeight屬性和表示ScrollViewer中所有可滾動內容的垂直大小的ExtentHeight屬性來確定內容是否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;
    }
}

如果您有任何其他問題,請隨時與我聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM