2011-10-21 104 views
2

我正在开发我的第一个Windows Phone 7应用程序。我刚刚接触Silverlight,C#和整个.NET场景,但我喜欢认为我正在取得体面的进步。解析Windows Phone 7上ShellTile的URI参数

我知道从各种代码示例中,我可以使用ShellTile设置瓷砖。我知道我可以通过与URI(就像这个例子)PARAMS:

ShellTile.Create(new Uri("/MainPage.xaml?DefaultTitle=FromSecondaryTile", UriKind.Relative), tile); 

任何人都可以点我的方向(或解释),我怎么可以处理从瓦传递的参数?所以,当瓷砖打开时,我想打开应用程序的某个部分。

为了记录在案,我知道我能为每一个来处理它的方式创建一个单独的页面,但我可以看到,越来越凌乱快:)

谢谢! Mike

回答

2

我发现一个可行的方式更容易对于我的特殊用途,与在xaml页面之间传递值的方法相同,只是将它们传递到查询字符串中: NavigationContext.QueryString [“XXXXX”]。ToString();

其中XXXXX是密钥/名称对中的名称。

1

您可以将url设置为单独的页面(如OtherPage.xaml),也可以使用提供的URI并更改OnNavigatedTo覆盖中的页面/视图。

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    ... 
} 

在这里,NavigationEventArgs将为您提供您提供的导航参数,作为常规字典。从那些,你可以决定然后做什么。

另外,还可以让您用一个简单的扩展(这里专门有一个整数密钥的过载,因为我个人更喜欢使用他们的标识符)

namespace System.Windows.Navigation 
{ 
    public static class NavigationExtensions 
    { 
     public static int? TryGetKey(this NavigationContext source, string key) 
     { 
      if (source.QueryString.ContainsKey(key)) 
      { 
       string value = source.QueryString[key]; 

       int result = 0; 
       if (int.TryParse(value, out result)) 
       { 
        return result; 
       } 
      } 

      return null; 
     } 

     public static string TryGetStringKey(this NavigationContext source, string key) 
     { 
      if (source.QueryString.ContainsKey(key)) 
      { 
       return source.QueryString[key]; 
      } 

      return null; 
     } 
    } 
} 
+0

你说什么克劳斯使很多的意义,但是我坚持从NavigationEventArgs拉动信息,在第一个例子中,如果我甚至可以只是得到它吐出什么是通过文本格式传递,我可以处理它..你有任何实际解析参数为文本的例子吗? –

+0

我发现这种方式适合我的特殊用途,它与在xaml页面之间传递值的方法相同,只是将它们传递给查询字符串: NavigationContext.QueryString [“XXXXX”]。ToString (); 其中XXXXX是密钥/名称对中的名称。 –

+0

是的,这是推荐的方式。 –