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