2013-07-01 53 views
0

我正在嘗試更改窗口中TextBlock的文本。我不斷收到NullRefernceException。我該如何解決?從窗口中修改頁面的TextBlock.Text

Welcome.xaml

 <TextBlock x:Name="StartNotice" HorizontalAlignment="Left" Margin="247,252,0,0" 
     TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="0.595,0.627" 
     Text="Say &quot;abracadabra&quot; to start ." FontStyle="Italic" 
     TextAlignment="Center" Foreground="Purple" Width="150"/> 

Welcome.xaml.cs

 private void Page_Loaded(object sender, RoutedEventArgs e) 
     { 
      MainWindow mainWindow=new MainWindow(); 
      mainWindow.DataContext=this; 
      mainWindow.Show();  
     } 

MainWindow.xaml.cs

 try 
     { 
      myKinect=KinectSensor.KinectSensor[0]; 
     } 
     catch 
     { 
      Welcome welcomePage=(Welcome)this.DataContext(); 
      welcomePage.StartNotice.Text="Please connect a Kinect"; 
     } 
+0

歡迎welcomePage =(歡迎)THI s.DataContext; – grantnz

+0

嘗試從DataContext中刪除父項。仍然拋出異常:NullReferenceException未處理...對象引用未設置爲對象的實例。 – agorapax

+0

哪一行代碼導致異常被拋出?你是否從調試器中檢查了MainWindow.xaml.cs中的welcomePage對象? – grantnz

回答

0

我對沒有迴應的道歉表示歉意。我已實現的解決方案如下所述:

我的應用程序的結構是:

窗口 - 主窗口 頁面 - 歡迎,登錄,菜單,任務

頁面使用加載導航到功能:

private void navigateTo(Page page) {this.Content=page;} // <this> is MainWindow 

所以在其他頁面的MainWindow傳遞給頁面的構造函數CCESS其成員,而無需創建主窗口的另一個實例(特別的NavigateTo(),因爲所有頁面都在主窗口類創建的。)

MainWindow.xaml.cs

Welcome welcomePage; 

public MainWindow() {...welcomePage = new Welcome(this);} 

Welcome.xaml.cs

MainWindow mainWindow; 

public Welcome(MainWindow windowMain) 
{ 
    mainWindow=windowMain; 
} 

要改變StartNotice的內容是簡單的:

setupKinect() 
{ 
...StartNotice.Text="Please connect a Kinect";... //used in a try-catch block 
} 
0

控制的性質可使用MVVM圖案被容易地修改。另一種更好的方法是通過視圖模型來改變它。

+0

我會更深入瞭解MVVM模式。從Channel9,MVVM DevReady開始接受教程,但是我很快就完成了一個項目,同時剛剛接觸C#,.NET,WPF,並且不得不使用它的開發文檔編寫Kinect。此應用程序將很短,主要集中在KinectInteractions和語音識別上,並集成了RTLS中的數據。 – agorapax

0

我只是想知道你在哪裏試圖更改「StartNotice」的文本?因爲據我所知,沒有什麼像在您的try {}塊中定義StartNotice.text。

+0

我斷開了Kinect以啓動catch塊。如果我放置一個MessageBox.Show()而不是試圖改變welcomePage.StartNotice.Text,一切都很好。 – agorapax

+1

既然你只是分配值,你可以試試這個代碼。 歡迎welcomePage = new歡迎(); welcomePage.StartNotice.Text =「請連接Kinect」; –