zoukankan      html  css  js  c++  java
  • 从PRISM开始学WPF(一)认识WPF-更新至Prism7.1

    我最近打算学习WPF ,在寻找MVVM框架的时候发现了PRISM,在此之前还从一些博客上了解了其他的MVVM框架,比如浅谈WPF中的MVVM框架--MVVMFoundation 中提到的MVVMFoundation,再比如 ViewModel从未如此清爽 - 轻量级WPF MVVM框架Stylet 中的Stylet。在知道PRISM是微软自家的框架的时候,就毫不犹豫的选了他,即便个人很倾向于可爱的Stylet。作为初学者,对WPF都没有很好的了解的情况下,去学习使用一个WPF的框架是否真的大丈夫?好在我发现了这个Prism-Samples-Wpf,既然是WPF的应用,是否也可以作为学习WPF的示例呢?而且Prism的中文资料很少,园子里的也比较老(这货貌似很少有人用)对新手不是太友好,所以我就将我学习Prism及WPF的过程记录下来。如有错误或者理解偏颇的地方,希望大家指正。

    0x0 WPF?

    维基百科中的定义:

    Windows Presentation Foundation(WPF)是美国微软公司推出.NET Framework 3.0及以后版本的组成部分之一,它是一套基于XML.NET Framework向量绘图技术的展示层开发框架,微软视其为下一代用户界面技术,广泛被用于Windows Vista的界面开发。

    WPF使用一种新的XAML(eXtensible Application Markup Language)语言来开发界面,这将把界面开发以及后台逻辑很好的分开,降低了耦合度,使用户界面设计师与程序开发者能更好的合作,降低维护和更新的成本。

    如果你有C# WinForms基础,WPF貌似就很好理解,他提供了一种界面开发方案,将界面与后台代码分开,而且WPF更加美观相比丑陋的WinForms,而且,他能更好的支持缩放(高DPI下的WinForms应用简直惨不忍睹)。

    WPF像WinForms一样可以自由拖放控件,在Toolbox中可以看到他支持大部分常用控件,跟WinForms的区别就是中间设计器部分,他分Design和XAML。

    每一个xaml都配有一个xaml.cs的后台文件,这个被称为 code-behind(新建的第一个WPF项目中的App.xaml.cs还有MainWindow.xaml.cs 这类都是),这里面就是我们熟悉的C#代码。

    我们先看看这两个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:UsersYqsource
    eposDotnetTestWpfApp1objDebugApp.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"
    
  • 相关阅读:
    设计权限管理系统(十一)
    设计权限管理系统(十)
    设计权限管理系统(九)
    设计权限管理系统(八)
    设计权限管理系统(七)
    设计权限管理系统(六)
    设计权限管理系统(五)
    设计权限管理系统(四)
    设计权限管理系统(三)
    Dom的深度优先遍历和广度优先遍历
  • 原文地址:https://www.cnblogs.com/hicolin/p/8694714.html
Copyright © 2011-2022 走看看