WPF中奇怪的不区分大小写的行为 - 请你解释一下

时间:2015-04-16 08:38:23

标签: wpf

有人可以向我解释一下:

我已删除应用程序中的startupUri并将其移至app类。

<Application x:Class="My.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            ><!-- StartupUri="/Forms/MainWindow.xaml"-->
    <Application.Resources>

    </Application.Resources>
</Application>

我意外地在“var mainWindow”中用小写字母键入“mainWindow”,但我在“MainWindow.Show();”中用大写字母引用它。

public partial class App : Application
{
    public App()
    {
         var mainWindow = new MainWindow();
         MainWindow.Show();
    }
}

请注意,MainWindow并未在此处引用该类,而是在小写mainWindow对象中引用。

为什么这样可以正常工作?我认为应该抛出编译器错误? mainWindowMainWindow如何引用同一个对象?

2 个答案:

答案 0 :(得分:2)

该应用程序有一个MainWindow类型的主窗口,它最初是&#34; MainWindow&#34;在您的项目中生成。如果您使用实例或此属性,结果应该相同。

这里有一张包含应用程序内容和MainWindow属性的图片:

enter image description here

答案 1 :(得分:2)

您使用MainWindow.Show()访问的MainWindow对象实际上是Application类的属性。您的主窗口也被称为“MainWindow”,这只是巧合。

根据MSDN,Application.MainWindow属性&#34;会自动设置为对要在AppDomain中实例化的第一个Window对象的引用。&#34;

您的代码var mainWindow = new MainWindow();实际上是这样做的:在AppDomain中实例化Window对象的第一个实例。因此,后续访问Application.MainWindow的尝试将返回新创建的Window对象。

行为是正确的,但 有点令人困惑。

MSDN:https://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow(v=vs.110).aspx