在UWP页面之间传递参数

时间:2016-07-19 03:26:06

标签: xaml uwp

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

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

以下是SettingPage的内容:

<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)。

3 个答案:

答案 0 :(得分:2)

您可以使用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);

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

按照以下方式将参数传递给其他页面。

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();

}