当 navigating/reloading 页面时,WPF 转到每个页面的顶部

WPF goes to the top of each pages when navigating/reloading page

我是 WPF .net 5.0 框架的新手。每次我导航到框架中的不同页面时,它都会保持滚动位置而不是返回到页面顶部。我可以知道是否有办法确保每次导航时它都到达页面顶部吗?谢谢!

这是xaml

<ScrollViewer Height="1000" Width="1000" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="23*"/>
                <RowDefinition Height="477*"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0">
                <TextBlock HorizontalAlignment="Left" Margin="10,0,0,0" TextWrapping="Wrap" VerticalAlignment="Center" FontWeight="Bold" Foreground="#FF5B5858"><Run Language="en-sg" Text="ADD NEW APPLICATION"/></TextBlock>

            </Grid>
            <Grid Grid.Row="1" Margin="0,10,0,0">
                <Border CornerRadius="0,0,30,0" BorderThickness="1">
                    <Frame x:Name="wizardFrame" Content="Frame" HorizontalAlignment="Center" Width="1002" Margin="0,9,0,471" NavigationUIVisibility="Hidden"/>
                </Border>
            </Grid>
        </Grid>
    </ScrollViewer>

这是背后的代码

wizardFrame.NavigationService.Navigate(new LocationPage1());

这是我用来导航到框架中不同页面的方法

this.NavigationService.Navigate(new GenerateApplicationNumberPage2());

您的问题是 ScrollViewer 与 Frame 无关,因此它不会对 Frame 导航做出反应。
为了解决这个问题,我看到了两个解决方案(选择一个):

  1. 您命名您的 ScrollViewer(例如:mainScroll),并在 code-behind 中订阅您的框架的 Navigated 事件,以便按照建议调用 ScrollViewer.ScrollToTop()在评论中。
// Somewhere in the constructor after InitializeComponent();
wizardFrame.Navigated += (_, __) => mainScroll.ScrollToTop();
  1. 您从主页中删除了 ScrollViewer,并在每个页面(LocationPage1GenerateApplicationNumberPage2 和任何其他页面)的 XAML 中添加一个作为根元素。它会起作用,因为每次导航时都会创建一个新页面(这对资源管理不是很好,但这不是这里的主题)。
    不同之处在于带有“添加新应用程序”的 TextBlock 将始终在页面上方可见,而不是在 ScrollViewer 中。
<Page x:Class="Namespace.LocationPage1">
  <ScrollViewer Height="1000" Width="1000">
    <!-- Your page content here -->
  </ScrollViewer>
</Page>