有人可以向我解释一下:
我已删除应用程序中的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
对象中引用。
为什么这样可以正常工作?我认为应该抛出编译器错误?
mainWindow
和MainWindow
如何引用同一个对象?
答案 0 :(得分:2)
该应用程序有一个MainWindow类型的主窗口,它最初是&#34; MainWindow&#34;在您的项目中生成。如果您使用实例或此属性,结果应该相同。
这里有一张包含应用程序内容和MainWindow属性的图片:
答案 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