在 UWP 中再次调用加载的事件



我正在与 UWP 一起工作WinUI 2.5 prerelease并注意到一种奇怪的行为,这在WPF中不会发生。 所以我正在使用TabView控件并在其中加载Page。每次创建新选项卡时,都会在其中加载一个新页面(没有什么花哨的(。

现在,我的页面上有一些OnLoaded事件。 因此,当创建新选项卡并加载页面时,将调用OnLoad事件(它应该(,但现在当我切换回其他选项卡并再次切换到当前页面时,将再次调用OnLoaded事件。为什么?

带有选项卡视图的主页

<Page
x:Class="TestUWPApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestUWPApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<controls:TabView x:Name="MainTabView">
<controls:TabView.TabItems>
<controls:TabViewItem Header="Intelliventory"
IsClosable="False" CanDrag="False">
<controls:TabViewItem.IconSource>
<controls:SymbolIconSource Symbol="Home" />
</controls:TabViewItem.IconSource>
<Frame SourcePageType="local:Page2" />
</controls:TabViewItem>
<controls:TabViewItem Header="Intelliventory"
IsClosable="False" CanDrag="False">
<controls:TabViewItem.IconSource>
<controls:SymbolIconSource Symbol="Home" />
</controls:TabViewItem.IconSource>
<Frame SourcePageType="local:Page3" />
</controls:TabViewItem>
</controls:TabView.TabItems>
</controls:TabView>
</Grid>
</Page>  

具有 OnLoaded 事件的第 3 页

namespace TestUWPApp
{
public sealed partial class Page3 : Page
{
public Page3()
{
this.InitializeComponent();
}
private void Page3_OnLoaded(object sender, RoutedEventArgs e)
{
//This event is called every time tab is switched
}
}
} 

每次将所选选项卡更改为Page3 tab调用onLoaded事件时。第一次切换选项卡并加载 Page 时,应该只调用一次。

每次将元素添加到可视化树、呈现并准备好进行交互时,都会引发Loaded事件。如果选择 TabViewItem,则 TabViewItems 页将再次添加到可视化树中,呈现,从而再次引发 Loaded 事件。所以这种行为是设计使然。

最新更新