【发布时间】:2020-10-19 15:53:59
【问题描述】:
我正在使用 WinUI 2.5 prerelease 与 UWP 合作,并注意到 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 事件。当第一次切换选项卡并加载页面时,应该只调用一次。
【问题讨论】:
-
您好,如果您使用的是预发布的WinUI包,您可以在Github提问,开发者正在那里积极回复相关问题。
-
@RichardZhang-MSFT 嗨,我也问过那里,但到目前为止没有任何回应。(我认为在非预发布版本中也会发生同样的情况)
-
你试过ChacheModes吗?public Page3() { this.InitializeComponent(); this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled; }
-
@thezapper 是的,我刚试过这个,它也不起作用。加载事件被调用!有人在 github 上告诉我,这是因为控件再次加载到选项卡导航上的可视树中,并在此调用了加载事件。
-
这对我来说感觉不好,原因 1 它不会发生在 WPF 和 2. 页面已经加载到选项卡中,因此它不应该在切换选项卡时再次调用加载事件..
标签: c# xaml uwp windows-community-toolkit winui