0

我正在尝试更改窗口中 TextBlock 的文本。我不断收到 NullReferenceException。我该如何解决?

欢迎.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"/>

欢迎.xaml.cs

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

主窗口.xaml.cs

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

3 回答 3

0

可以使用 MVVM 模式轻松修改控件的属性。另一种更好的方法是通过视图模型更改它。

于 2013-07-02T04:42:17.663 回答
0

我只是想知道您在哪里尝试更改“StartNotice”的文本?..因为据我所知,没有什么比在您的 try{} 块中定义 StartNotice.text 更好的了。

于 2013-07-02T12:10:19.060 回答
0

我很抱歉没有做出回应。我实施的解决方案描述如下:

我的应用程序的结构是:

窗口- 主窗口 页面- 欢迎、登录、菜单、任务

使用导航到功能加载页面:

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

因此,在其他页面中,MainWindow 在构造函数中传递给页面以访问其成员,而无需创建 MainWindow 的另一个实例(尤其是 navigateTo(),因为所有页面都是在 MainWindow 类中创建的。)

主窗口.xaml.cs

Welcome welcomePage;

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

欢迎.xaml.cs

MainWindow mainWindow;

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

要更改 StartNotice 的内容,很简单:

setupKinect()
{
...StartNotice.Text="Please connect a Kinect";... //used in a try-catch block
}
于 2013-07-17T19:07:17.350 回答