问题描述
用VS2010生成WPF程序后,App.g.cs中的InitializeComponent()和MainWindow中的InitializeComponent()作用分别是什么?为什么删除App.Xaml.cs和MainWindow.Xaml.cs后程序正常启动?
解决方案
解决方案二:
wpf是严格的mvvm模式,xaml是布局呈现,.cs等代码文件是交互逻辑,而你说的InitializeComponent就是v-m之间的桥梁,它使得代码可以使用xaml的布局元素。然而xaml并不是只为wpf而生的,它是一种呈现方式,你也能把它理解为跟html是同一种东西,可以不依赖任何代码独立支持呈现过程。不妨试一下,做一个最简单的xaml文件,看看它是不是可以直接双击用ID浏览器查看,不用编译,更不用依赖wpf。比如:<Gridxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Height="990"Width="700"><BorderWidth="300"Height="300"Background="Blue"/></Grid>所以你现在知道了,为什么删掉.cs文件仍然可以运行。
解决方案三:
写错了,是IE浏览器
解决方案四:
运行xaml文档的时候,打开方式选择“WindowsPresentationFoundation主机”,这样就会自动启动IE浏览器,直接用浏览器打开应该不行。
解决方案五:
引用1楼rocmemory的回复:
wpf是严格的mvvm模式,xaml是布局呈现,.cs等代码文件是交互逻辑,而你说的InitializeComponent就是v-m之间的桥梁,它使得代码可以使用xaml的布局元素。然而xaml并不是只为wpf而生的,它是一种呈现方式,你也能把它理解为跟html是同一种东西,可以不依赖任何代码独立支持呈现过程。不妨试一下,做一个最简单的xaml文件,看看它是不是可以直接双击用ID浏览器查看,不用编译,更不用依赖wpf。比如:<Gridxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Height="990"Width="700"><BorderWidth="300"Height="300"Background="Blue"/></Grid>所以你现在知道了,为什么删掉.cs文件仍然可以运行。
感谢您的回复,不过我还是有些不明白,请教一下:1、App.g.cs中的InitializeComponent()中调用了Base.StartupUri=newSystem.Uri("MainWindow.xaml",System.UriKind.Relative);该语句的作用是什么,是加载集成到可执行文件中的MainWindow.baml吗?如果是,那么App.g.cs中的InitializeComponent()中的System.UriresourceLocater=newSystem.Uri("/WpfApplication;component/Mainwindow.xaml",System.UriKind.Relative);System.Windows.Application.LoadComponent(this,resourceLocater);两个语句作用又是什么呢?
解决方案六:
引用4楼hp8563的回复:
Quote: 引用1楼rocmemory的回复:
wpf是严格的mvvm模式,xaml是布局呈现,.cs等代码文件是交互逻辑,而你说的InitializeComponent就是v-m之间的桥梁,它使得代码可以使用xaml的布局元素。然而xaml并不是只为wpf而生的,它是一种呈现方式,你也能把它理解为跟html是同一种东西,可以不依赖任何代码独立支持呈现过程。不妨试一下,做一个最简单的xaml文件,看看它是不是可以直接双击用ID浏览器查看,不用编译,更不用依赖wpf。比如:<Gridxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Height="990"Width="700"><BorderWidth="300"Height="300"Background="Blue"/></Grid>所以你现在知道了,为什么删掉.cs文件仍然可以运行。感谢您的回复,不过我还是有些不明白,请教一下:1、App.g.cs中的InitializeComponent()中调用了Base.StartupUri=newSystem.Uri("MainWindow.xaml",System.UriKind.Relative);该语句的作用是什么,是加载集成到可执行文件中的MainWindow.baml吗?如果是,那么App.g.cs中的InitializeComponent()中的System.UriresourceLocater=newSystem.Uri("/WpfApplication;component/Mainwindow.xaml",System.UriKind.Relative);System.Windows.Application.LoadComponent(this,resourceLocater);两个语句作用又是什么呢?
上面有一处输错:“如果是,那么App.g.cs中的”应为“如果是,那么MainWindow.g.cs中的”
解决方案七:
这两句作用分别是:关联资源、关联布局元素1、比如你在xaml中定义了一个Style<Stylex:Key="box"……那么如果想在后台代码中使用诸如“button.Style=(Style)this.Resources["box"]”的功能,就需要“关联资源”,否则后台不认识前台的box2、同样的,如果在xaml中定义了一个button<Buttonx:Name="btn"……那么如果要在后台使用btn这个名称,就需要关联布局元素也就是说,这个.g.cs文件的作用,就是让交互逻辑得以使用布局逻辑。在你面前站着几个员工,你不知道他们的名字和职务,所以无法指使他们去做什么事情,而现在我给了你一张员工名册,那么你可以了。
解决方案八:
引用1楼rocmemory的回复:
wpf是严格的mvvm模式,xaml是布局呈现,.cs等代码文件是交互逻辑,而你说的InitializeComponent就是v-m之间的桥梁,它使得代码可以使用xaml的布局元素。然而xaml并不是只为wpf而生的,它是一种呈现方式,你也能把它理解为跟html是同一种东西,可以不依赖任何代码独立支持呈现过程。不妨试一下,做一个最简单的xaml文件,看看它是不是可以直接双击用ID浏览器查看,不用编译,更不用依赖wpf。比如:<Gridxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Height="990"Width="700"><BorderWidth="300"Height="300"Background="Blue"/></Grid>所以你现在知道了,为什么删掉.cs文件仍然可以运行。
+1,+10086
解决方案九:
引用6楼rocmemory的回复:
这两句作用分别是:关联资源、关联布局元素1、比如你在xaml中定义了一个Style<Stylex:Key="box"……那么如果想在后台代码中使用诸如“button.Style=(Style)this.Resources["box"]”的功能,就需要“关联资源”,否则后台不认识前台的box2、同样的,如果在xaml中定义了一个button<Buttonx:Name="btn"……那么如果要在后台使用btn这个名称,就需要关联布局元素也就是说,这个.g.cs文件的作用,就是让交互逻辑得以使用布局逻辑。在你面前站着几个员工,你不知道他们的名字和职务,所以无法指使他们去做什么事情,而现在我给了你一张员工名册,那么你可以了。
嗯,有些明白了,您的意思是不是App.g.cs中的InitializeComponent()将资源文件中的window对象窗口呈现出来,和编码的Win.Show作用相同;而MainWindow.g.cs中的InitializeComponent()则将窗口中的对象和它们的名字关系起来?这样在后台代码中才能正常使用资源文件中的元素?此外,MainWindow.g.cs中的构造函数中的InitializeComponent()删除后,是不是会调用缺省的InitializeComponent()来关联资源布局元素?