C#从App.xaml.cs访问WPF主窗口中的静态属性时导致这种奇怪行为的原因

时间:2017-02-01 14:38:12

标签: c# wpf static

我有公共静态属性" inDevMode"在我的WPF项目的主窗口中,我在启动应用程序时基于命令行参数设置此属性。

MainWindow mainWindow = new MainWindow();
if (startInDevMode)
{
    MainWindow.inDevMode = true;
}
mainWindow.Show();

" MainWindow"花括号内没有突出显示为灰色(其他两个类型引用),编译时我收到此消息:

  

'窗口'不包含' inDevMode'的定义没有扩展方法' inDevMode'接受类型' Window'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

如果我将大括号内的内容更改为实例引用(如下所示),我在访问静态属性时知道错误:

MainWindow mainWindow = new MainWindow();
if (startInDevMode)
{
    mainWindow.inDevMode = true;
}
mainWindow.Show();

我收到此错误:

  

会员' MainWindow.inDevMode'无法使用实例引用访问;使用类型名称来限定它

但是如果我改变" mainWindow"的标识符。实例到" MainWindow"如下所示我没有错误?

MainWindow MainWindow = new MainWindow();
if (startInDevMode)
{
    MainWindow.inDevMode = true;
}
MainWindow.Show();

和大括号内的类型引用(" MainWindow")现在是灰色的

1 个答案:

答案 0 :(得分:3)

MainWindow是Application类的一个属性,它返回Window,并且此类型没有“inDevMode”属性。这就是你得到错误的原因。您有命名冲突。

您可以使用命名空间限定MainWindow类型的名称,以便能够设置静态属性:

MainWindow mainWindow = new MainWindow();
if (startInDevMode)
{
    WpfApplication1.MainWindow.inDevMode = true;
}
mainWindow.Show();