如何在MainWindow.xaml.cs之外设置.Content属性?

时间:2017-05-18 01:25:16

标签: c# wpf visual-studio xaml

在MainWindow.xaml.cs中,我通常会这样做:

this.Content = new MyPage();

其中MyPage是在可视化设计器中创建的WPF页面。

工作正常,但如何从MyPage.xaml.cs中将主窗口的内容设置为另一个页面?

感谢。

1 个答案:

答案 0 :(得分:0)

就像我在评论中所说,你需要获得对应用程序主窗口的引用。您可以使用以下代码执行此操作:

var mainWindow = Application.Current.MainWindow;

然后您可以直接设置其内容,就像在“MainWindow.xaml.cs”中一样:

mainWindow.Content = new Page1();

如果您需要获取或设置特定于窗口实现的内容,可以使用上述方法转换对象:

var mainWindow = Application.Current.MainWindow as MyWindow;

if (mainWindow != null)
    mainWindow.MyProperty = someValue;

(其中MyWindow是主窗口类的名称,MyProperty是该类中定义的某些属性。)

或者,您可以创建在构造函数中初始化的主窗口的静态singleton

public static readonly MyWindow Singleton;

public MyWindow()
{
    InitializeComponent();

    if (Singleton == null)
        Singleton = this;
}

然后您可以像访问静态属性一样访问它:

MyWindow.Singleton.MyProperty = someValue;

这种方法的好处是也可以在其他窗口上使用。

(我只会在只在程序生命周期内打开一次的窗口上推荐这个。但是。如果你有一个单独的窗口会创建多个实例,那么Singleton会只能为第一个设置。)