C# Silverlight-如何从用户控件导航到普通页面?
如果在用户控件中执行此操作:C# Silverlight-如何从用户控件导航到普通页面?,c#,.net,silverlight,windows-phone-7,C#,.net,Silverlight,Windows Phone 7,如果在用户控件中执行此操作: NavigationService.Navigate(new Uri("/Alliance.xaml", UriKind.Relative)); 它说这个错误: 非静态字段、方法或属性“System.Windows.Navigation.NavigationService.Navigate(System.Uri)”需要对象引用 多谢各位 我解决了将普通页面作为参数传递给用户控件的问题,这样我就可以获得NavigationService。NavigationSer
NavigationService.Navigate(new Uri("/Alliance.xaml", UriKind.Relative));
它说这个错误:
非静态字段、方法或属性“System.Windows.Navigation.NavigationService.Navigate(System.Uri)”需要对象引用
多谢各位
我解决了将普通页面作为参数传递给用户控件的问题,这样我就可以获得NavigationService。NavigationService是一个类。Navigate是一种可以在该类的实例上调用的方法。它不是可以从对象引用外部调用的静态方法
基本上,您需要获取当前页面的当前导航服务。此链接应该会有所帮助。NavigationService是Silverlight中页面对象的属性,这就是您出现此错误的原因。它不是Silverlight中UserControl的属性 以下是一些能够解决您看到的问题的选项
我通常使用事件处理程序。例子: 在用户控件中,定义如下内容
public event EventHandler goToThatPage;
您将调用以下示例中的控件:
goToThatPage(this, new EventArgs());
然后在MainPage.xaml.cs的构造函数中(如果包含用户控件),您将定义:
uxControlName.goToThatPage+= new EventHandler(ControlGoToThatPage);
在MainPage.xaml.cs的某个地方,您最终声明要执行的操作:
void ControlGoToThatPage(object sender, EventArgs e)
{
this.NavigationService.Navigate(new Uri("/Pages/ThatPage.xaml", UriKind.Relative));
}
我知道这很旧,但我在Silverlight应用程序上也遇到过同样的情况。我想做一些类似于迪帕克的回答的事情,但我很长时间都不明白为什么在我的情况下它不起作用 结果我需要调用刷新,而不是导航;因为我最初认为,如果URI与当前页面相同,navigate将重新加载页面。原谅我的初学者
(((Application.Current.RootVisual as MainPage).ContentFrame as Frame).Content as Page).NavigationService.Refresh();
以下是Silverlight for Windows Phone 8的另一个解决方案:
public Page Page { get; set; }
嗯,在UserControl中,我有一个按钮,当它被单击时,我导航到另一个页面。你可以使用HyperlinkButton而不是常规按钮吗?我会说,不要从控件导航,而是给页面一个事件,并允许页面导航。您的控件应该只提供输入,而不提供控件导航。谢谢。这帮了我一个解决方案…而且是一个很好的、整洁的方法!我尝试了瓦利德的解决方案。这解决了我的问题……多年来我一直在寻找解决办法。导航框架是MVVM开发的砖墙。我发现的唯一解决办法是我拒绝使用的令人厌恶的黑客!我不想我的网页有任何导航知识!什么是PhoneApplicationFrame?在我的代码中,我有App.xaml,它调用Main.xaml Main.xaml是UserControl,我想从那里使用导航。
((Frame)(Application.Current.RootVisual as MainPage).FindName("ContentFrame"))
.Navigate(new Uri("Page Name", UriKind.Relative));
(((Application.Current.RootVisual as MainPage).ContentFrame as Frame).Content as Page).NavigationService.Refresh();
public Page Page { get; set; }
this.Loaded += delegate
{
Page = (Application.Current.RootVisual as Frame).Content as Page;
};
Page.NavigationService.Navigate(new Uri("/Alliance.xaml", UriKind.Relative));