【问题标题】:Passing parameters between UWP pages在 UWP 页面之间传递参数
【发布时间】:2016-07-19 03:26:06
【问题描述】:

我正在开发一个基于XAMLNavigation sample 的简单应用程序。我已经修改了AppShell.xaml 文件,以便单击设置按钮将用户导航到设置页面。

<Button x:Name="SettingsNavPaneButton"
                        Grid.Row="2"
                        Grid.Column="2"
                        Style="{StaticResource SplitViewPaneButtonStyle}"
                        Content="&#xE713;"
                        Click="SettingsNavPaneButton_Clicked"
                        AutomationProperties.Name="Settings"
                        ToolTipService.ToolTip="Settings"/>

以下是设置页面的内容:

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SettlerBalancer.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Height="200" Width="Auto" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="24,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>

    <CheckBox x:Name="tileBalance" Grid.Row="0" Content="Text Tile" HorizontalAlignment="Left" Margin="0,0,0,-28.8" Grid.RowSpan="3" VerticalAlignment="Top" IsChecked="True" Click="tileBalance_Click"/>
    <CheckBox x:Name="portBalance" Grid.Row="1" Content="Text port" HorizontalAlignment="Left" Margin="0,0,0,-28.8" Grid.RowSpan="3" VerticalAlignment="Top" IsChecked="True" Click="portBalance_Click"/>
</Grid>

在此页面中,我有 2 个复选框,它们是我要传递给 BasicPageLandingPage 的参数。

据我了解,您可以通过重写 OnNavigation 方法在页面之间传递参数,如this question 所示。这意味着在 SettingPage.xaml.cs 中,我必须像这样传递参数:

Frame.Navigate(typeof(BasicPage), parameters);
Frame.Navigate(typeof(LandingPage), parameters);

但是,在我的例子中,BasicPage 和 LandingPage 实际上不是页面,而是拆分视图面板中的框架,它们只能通过NavigationListView 访问。虽然 SettingPage 是 splitview 的一部分,但它不是 NavigationListView 的一部分。因此,在 SettingPage 中,我不知道用户在使用 NavigationListView 进行导航时将前往哪个页面(BasicPage 或 LandingPage)。

【问题讨论】:

    标签: xaml uwp


    【解决方案1】:

    您可以使用 Windows.Storage.ApplicationData.Current.LocalSettings 类来保存/恢复设置。您不必创建自己的设置类。 以下网址可能对您有所帮助。

    https://msdn.microsoft.com/en-us/windows/uwp/app-settings/store-and-retrieve-app-data

    还有,

    Frame.Navigate(typeof(BasicPage), parameters);
    

    基本上,导航方法的参数适用于“导航”目的 - 例如浏览网址等。 因为,导航方法具有保存/恢复导航堆栈的功能。保存/恢复应用程序设置值是没有用的。它与“导航”无关:)

    【讨论】:

    • 这是有道理的。没错,我要传递的这些参数是应用程序设置值。
    【解决方案2】:

    为什么不保持简单并创建一个静态应用程序设置类

    public static ApplicationSettings{
         private static Dictionary<string,object> _settingsCache = 
                                              new Dictionary<string,object>();
    
         public static void AddItem(string itemKey, object itemValue){
                    _settingsCache.add(itemKey,itemValue);
         }
    
         public static object GetItem(string itemKey){
                   _settingsCache[itemKey];
         }
    }
    

    【讨论】:

    • 这个缓存,和全局变量一样吗?
    • @v4r 是的。我所做的是我有一个 ApplicationServices 类,其中包含诸如此类的逻辑、处理异常、写入存储等。
    【解决方案3】:

    通过以下方式将参数传递给其他页面..

    private void myclick(object sender, RoutedEventArgs e)  
    {
       show s = new show() { name = name.Text, desig = desig.Text, sal = int.Parse(sal.Text) };
       this.Frame.Navigate(typeof(BlankPage1), s);
    }
    

    下面的代码获取目标表单的参数值

    protected override void OnNavigatedTo(NavigationEventArgs e)    
    {
       show s =(show) e.Parameter;
       name.Text = "Your Name is: "+ s.name;
       desig.Text = "your Designation is: "+ s.desig;
       sal.Text = "Your Salary is: "+ s.sal.ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多