Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在UWP中再次调用已加载事件_C#_Xaml_Uwp_Windows Community Toolkit_Winui - Fatal编程技术网

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
        }
    }
}