我最近打算学习 WPF , 在寻找 MVVM 框架的时候发现了 PRISM, 在此之前还从一些博客上了解了其他的 MVVM 框架, 比如浅谈 WPF 中的 MVVM 框架 --MVVMFoundation 中提到的 MVVMFoundation, 再比如 ViewModel 从未如此清爽 - 轻量级 WPF MVVM 框架 Stylet 中的 Stylet 在知道 PRISM 是微软自家的框架的时候, 就毫不犹豫的选了他, 即便个人很倾向于可爱的 Stylet 作为初学者, 对 WPF 都没有很好的了解的情况下, 去学习使用一个 WPF 的框架是否真的大丈夫? 好在我发现了这个 https://github.com/PrismLibrary/Prism-Samples-Wpf , 既然是 WPF 的应用, 是否也可以作为学习 WPF 的示例呢? 而且 Prism 的中文资料很少, 园子里的也比较老 (这货貌似很少有人用) 对新手不是太友好, 所以我就将我学习 Prism 及 WPF 的过程记录下来如有错误或者理解偏颇的地方, 希望大家指正
目录:
从 PRISM 开始学 WPF(二)Prism?
从 PRISM 开始学 WPF(三)Prism-Region?
从 PRISM 开始学 WPF(四)Prism-Module?
从 PRISM 开始学 WPF(五)MVVM(一)ViewModel?
从 PRISM 开始学 WPF(六)MVVM(一)Command?
0x0 WPF?
维基百科中的定义:
Windows Presentation Foundation(WPF)是美国微软 https://zh.wikipedia.org/wiki/微軟 公司推出. NET Framework 3.0 https://zh.wikipedia.org/wiki/.NET_Framework_3.0 及以后版本的组成部分之一, 它是一套基于 https://zh.wikipedia.org/wiki/XML .NET Framework https://zh.wikipedia.org/wiki/.NET_Framework 向量 https://zh.wikipedia.org/wiki/向量 绘图技术的展示层开发框架, 微软视其为下一代用户界面技术, 广泛被用于 Windows Vista https://zh.wikipedia.org/wiki/Windows_Vista 的界面开发
WPF 使用一种新的 https://zh.wikipedia.org/wiki/XAML (eXtensible Application Markup Language)语言来开发界面, 这将把界面开发以及后台逻辑很好的分开, 降低了耦合度 https://zh.wikipedia.org/wiki/耦合度_(計算機科學) , 使用户界面设计师与程序开发者能更好的合作, 降低维护和更新的成本
如果你有 C# WinForms 基础, WPF 貌似就很好理解, 他提供了一种界面开发方案, 将界面与后台代码分开, 而且 WPF 更加美观相比丑陋的 WinForms, 而且, 他能更好的支持缩放(高 DPI 下的 WinForms 应用简直惨不忍睹)
WPF 像 WinForms 一样可以自由拖放控件, 在 Toolbox 中可以看到他支持大部分常用控件, 跟 WinForms 的区别就是中间设计器部分, 他分 Design 和 XAML
每一个 xaml 都配有一个 xaml.cs 的后台文件, 这个被称为 code-behind(App.xaml.cs 还有 MainWindow.xaml.cs ), 这里面就是我们熟悉的 C# 代码
xaml 我们不熟悉, 暂且不看, 我们先看看这两个 code-behind 里的内容:
为了篇幅紧凑, 省去了 using 部分
- App.xaml.cs:
- namespace WpfApp1
- {
- /// <summary>
- /// Interaction logic for App.xaml
- /// </summary>
- public partial class App : Application
- {
- }
- }
- MainWindow.xaml.cs:
- namespace WpfApp1
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- }
- }
好像少了点什么?
Main 方法呢? 开始我也这么觉得, 直到我尝试着自己在 App.xaml.cs 中写了一个 Main 方法, 然后编译的时候报了个错:
CS0111 Type 'App' already defines a member called 'Main' with the same parameter types WpfApp1 C:\Users\Yq\source\repos\DotnetTest\WpfApp1\obj\Debug\App.g.cs
原来在这里! 接下来我们看一下这个 App.g.cs:
为了篇幅紧凑, 依旧省去了部分代码
- using WpfApp1;
- namespace WpfApp1 {
- /// <summary>
- /// App
- /// </summary>
- public partial class App : System.Windows.Application {
- /// <summary>
- /// InitializeComponent
- /// </summary>
- [System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
- public void InitializeComponent() {
- #line 5 "..\..\App.xaml"
- this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
- #line default
- #line hidden
- }
- /// <summary>
- /// Application Entry Point.
- /// </summary>
- [System.STAThreadAttribute()]
- [System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
- public static void Main() {
- WpfApp1.App app = new WpfApp1.App();
- app.InitializeComponent();
- app.Run();
- }
- }
- }
虽然看不太懂, 但是, 不管怎样, 我们看到了我们熟悉的 Main 方法, 他的作用也很明确 ,Application Entry Point.
InitializeComponent
方法初始化了 StartupUri, 他是在 App.xaml 中定义的:
StartupUri="MainWindow.xaml"
来源: https://www.cnblogs.com/hicolin/p/8694714.html