Разбор аргументов URI в ShellTile в Windows Phone 7 - PullRequest
2 голосов
/ 21 октября 2011

Я нахожусь в процессе разработки моего первого приложения для Windows Phone 7.Я знаком с Silverlight, C # и всей .NET Scene, но мне нравится думать, что я добился приличного прогресса.

Я знаю из различных примеров кода, я могу установить плитку с помощью ShellTile.Я знаю, что могу передавать параметры с помощью URI (как в этом примере):

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

Может ли кто-нибудь указать мне направление (или объяснить), как я могу обрабатывать аргументы, переданные с тайла?Итак, когда плитка открыта, я бы хотел открыть определенную часть приложения.

Для записи, я знаю, я мог бы создать отдельную страницу для каждой, чтобы обрабатывать ее таким образом, ноЯ вижу, что быстро становится грязно :)

Спасибо!Mike

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Я нашел способ, который хорошо подходит для моей конкретной цели, - это то же самое средство передачи значений между страницами xaml, которое просто передает их в строке запроса: NavigationContext.QueryString ["XXXXX"]. ToString();

Где XXXXX - имя в паре ключ / имя.

1 голос
/ 21 октября 2011

Вы можете установить 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...