WP7新问题。
我有以下代码:
public class KeyboardHandler : INotifyPropertyChanged
{
// lots of methods here
public void FunctionKeyHandler()
{
Uri targetUri = new Uri("/View/SelectTable.xaml",System.UriKind.Relative);
NavigationService.Navigate(targetUri);
}
// more methods
}
我收到一个错误:
“错误1非静态字段,方法或属性'System.Windows.Navigation.NavigationService.Navigate(System.Uri)'
为什么?
答案 0 :(得分:39)
Navigate方法实际上是非静态NavigationService类的一部分。由于它是非静态的,因此您需要创建它的实例。您之前不必创建实例的原因是因为它是Page对象的一部分,但由于您不是从Page对象继承,因此您无权访问NavigationService实例。
有很多方法可以解决这个问题,例如在你的usercontrol中创建一个事件处理程序,你的主机页面对象(例如MainPage)可以订阅它并让它代表它激活NavigationService。
或者您只需从应用程序主机访问NavigationService,如下所示:
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri);
答案 1 :(得分:6)
NavigationService
是PhoneApplicationPage
类中属性的名称,但它也是类的名称。
从页面调用NavigationService.Navigate()
方法时,可以使用基类中的对象。但在您的情况下,您没有具有此名称的对象,因此编译器尝试访问NavigationService类,并进行调用,就像Navigate是静态方法一样。
但它不是静态的,这就是您收到此错误的原因:您必须使用NavigationService的实例