Навигация из пользовательского управления в телефоне win 7 - PullRequest
3 голосов
/ 17 февраля 2011

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

Можете ли вы помочь мне?

1 Ответ

7 голосов
/ 17 февраля 2011

Я думаю, что вижу проблему, но, как указал Остин, в вашем первоначальном описании не так много всего.Похоже, вы пытаетесь получить доступ к NavgationService (который является PhoneApplicationPage свойством) из UserControl, который вы помещаете на эту страницу.

Как и во многих других API-интерфейсах, выесть пара вариантов.Во-первых, вы можете получить доступ к PhoneApplicationFrame (который содержит ваши страницы и управляет навигацией) и использовать его для навигации:

var frame = App.Current.RootVisual as PhoneApplicationFrame;
frame.Navigate(new Uri("/TargetPage.xaml", UriKind.Relative));

В качестве альтернативы, вы можете просматривать дерево визуалов элемента управления, используя VisualTreeHelper пока не дойдете до содержащей страницы:

var page = GetParentOfType<PhoneApplicationPage>(this); // this is your user control


private static T GetParentOfType<T>(DependencyObject item) where T : DependencyObject
{
    if (item == null) throw new ArgumentNullException("item");
    T result;
    var parent = VisualTreeHelper.GetParent(item);
    if (parent == null) return null;
    else if (parent.GetType().IsSubclassOf(typeof(T))
    {
          result = (T)parent;
    }
    else result = GetParameterOfType<T>(parent);
    return result;
}

Как видите, подход VisualTree включает в себя больше кода, но дает вам объект содержащей страницы, где у вас больше доступа к таким вещам, как NavigationContext и т. Д.

Надеюсь, что это был ваш вопрос (и ваш ответ.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...