0

我正在与 UWP 合作,WinUI 2.5 prerelease并注意到在WPF. 所以我正在使用一个TabView控件并在其中加载一个Page。每次创建新选项卡时,都会在其中加载一个新页面(没什么花哨的)。

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

带有 TabView 的主页

<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 事件的 Page3

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都会被调用。当第一次切换选项卡并加载页面时,应该只调用一次。

4

1 回答 1

1

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

于 2020-08-07T17:11:55.600 回答