2011-05-14 98 views
12

WP7 newb問題在這裏。WP7 - NavigationService.Navigate抱怨說它沒有收到對象引用。 。 。但爲什麼?

我有以下代碼:

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)」

爲什麼?

回答

39

的一個實例的Navigate方法實際上就是非靜態NavigationService類的一部分。由於它是非靜態的,因此您需要創建它的一個實例。您之前不必創建實例的原因是因爲它是Page對象的一部分,但由於您不是從Page對象繼承的,因此您無權訪問NavigationService實例。

有很多種方法可以解決這個問題,例如在你的用戶控件中創建一個事件處理程序,使得你的主機頁面對象(例如MainPage)可以訂閱並讓它以其名義觸發NavigationService。

或者你可以簡單地從應用主機訪問的NavigationService像這樣:

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(targetUri); 
6

NavigationService是在PhoneApplicationPage類屬性的名稱,但它也是類的名稱。

從頁面調用NavigationService.Navigate()方法時,可以使用基類中的對象。但在你的情況下,你沒有這個名字的對象,所以編譯器試圖訪問NavigationService類,並且像Navigate是一個靜態方法那樣進行調用。

但它不是靜態的,這就是爲什麼你收到此錯誤:必須使用的NavigationService

相關問題