在win 7手机中从用户控制导航

时间:2011-02-17 05:31:23

标签: silverlight windows-phone-7

我无法从用户控件调用导航服务。 即使我在主页面上创建一个事件处理程序来调用老挝无效的导航服务。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:7)

我想我已经看到了问题,但就像奥斯汀所指出的那样,在你的初步描述中没有太多可以继续的。听起来您正试图从放置在该页面上的UserControl中访问NavgationService(这是PhoneApplicationPage属性)。

与这些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等内容。

希望这是你的问题(和你的答案。)