C# 在UWP中再次调用已加载事件
我正在使用C# 在UWP中再次调用已加载事件,c#,xaml,uwp,windows-community-toolkit,winui,C#,Xaml,Uwp,Windows Community Toolkit,Winui,我正在使用winui2.5预发布版使用UWP,并且注意到WPF中没有发生的奇怪行为。 因此,我使用了一个选项卡视图控件,并在其中加载了一个页面。每次创建一个新选项卡时,都会在其中加载一个新页面(没有什么特别之处) 现在,我的页面上有一些已加载的事件。因此,当创建一个新选项卡并加载页面时,会调用OnLoad事件(正如它应该调用的那样),但现在当我切换回其他选项卡并再次切换到当前页面时,会再次调用OnLoad事件。为什么? 带有选项卡视图的主页 <Page x:Class="
winui2.5预发布版
使用UWP,并且注意到WPF
中没有发生的奇怪行为。
因此,我使用了一个选项卡视图
控件,并在其中加载了一个页面
。每次创建一个新选项卡时,都会在其中加载一个新页面(没有什么特别之处)
现在,我的页面上有一些已加载的事件。因此,当创建一个新选项卡并加载页面时,会调用OnLoad
事件(正如它应该调用的那样),但现在当我切换回其他选项卡并再次切换到当前页面时,会再次调用OnLoad
事件。为什么?
带有选项卡视图的主页
<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>
每次将所选选项卡更改为Page3选项卡
时,将调用onload
事件。当第一次切换选项卡并加载页面时,应该只调用一次。每次将元素添加到VisualTree、呈现并准备好交互时,都会引发loaded
事件。如果选择TabViewItem,则TabViewItems页面将再次添加到可视化树中,并进行渲染,从而再次引发加载的事件。因此,这种行为是设计出来的。您好,如果您使用的是预发布的WinUI软件包,您可以在上提问,开发人员正在积极回答相关问题。@RichardZhang MSFT hi,我也在那里提问,但到目前为止没有回应。(我认为非预发布版本也会出现同样的情况)你试过ChacheModes吗?public Page3(){this.InitializeComponent();this.NavigationCacheMode=Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;}@thezapper是的,我刚试过这个,它也不起作用。加载事件被称为!有人在github上告诉我,之所以会这样,是因为控件再次加载到选项卡导航的可视化树中,并在该选项卡上调用了加载事件。我感觉不太好,原因1是WPF和2中没有发生这种情况。页面已加载到选项卡中,因此切换选项卡时不应再次调用加载事件。。
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
}
}
}