首页 > 解决方案 > UWP 在导航视图上保存切换开关状态

问题描述

所以我有一个导航视图和一个settingspage.xaml。我的 mainwindow.xaml 看起来像这样:

<NavigationView 
            PaneDisplayMode="LeftCompact"
            IsBackButtonVisible="Collapsed"
            SelectionChanged="NavigationView_SelectionChanged"
            Loaded="NavigationView_Loaded"
            IsSettingsVisible="True">

            <NavigationView.MenuItems>

                <NavigationViewItem Content="Player" Icon="Microphone" Tag="playerview"/>
                <NavigationViewItem Content="About" Icon="Contact" Tag="aboutview"/>

            </NavigationView.MenuItems>
            <ScrollViewer>
                <Frame x:Name="ContentFrame" />
            </ScrollViewer>
</NavigationView>

而cs文件只是在页面之间导航。

这是我的 SettingsPage.xaml

<Grid>
        <StackPanel Margin="40,40,20,40">
            
            <TextBlock Text="Settings" FontSize="20" />
            <ToggleSwitch Margin="0,25,0,0" x:Name="SwitchPresence" Header="Discord Presence" Toggled="ToggleSwitch_Toggled"/>
            
        </StackPanel>
</Grid>

它工作正常,但是每当我导航到其他页面并导航回设置页面时,即使我在它上面,当前状态也是关闭的。

标签: c#.netuwpuwp-xaml

解决方案


该行为的原因是 UWP 不会缓存 Page 对象。因此,当您导航回 SettingsPage 时,您的应用将创建一个新的 SettingsPage 实例。

要保存切换按钮的值,最简单的方法是启用 Page 类的NavigationCacheMode。启用此属性后,SettingsPage 将被缓存,您将看到切换按钮值未重置。

如果您需要在其他页面上访问此值,那么我建议您将切换按钮值直接保存在 App 类中,或者将其保存在用作数据管理器的单例类中。


推荐阅读