WPF笔记(1.1 WPF基础)——Hello,WPF!
原文:WPF笔记(1.1 WPF基础)——Hello,WPF!

Example 1-1. Minimal C# WPF application
// MyApp.cs
using System;
using System.Windows; // the root WPF namespace

namespace MyFirstAvalonApp {
  class MyApp {
    [STAThread]
    static void Main(  ) {
      // the WPF message box
      MessageBox.Show("Hello, Avalon");
    }
  }
}

1。这里,在project中要事先导入3个framework的dll,分别是WindowsBase,PresentationCore,PresentatioFramework,这样你才可以使用新的System.Windows——来自\Framework\v3.0\WindowsBase.dll,而不是\Framework\v2.0.50727\System.Windows.Forms.dll,从而增加了很多新的功能。
2。注意,vs2005下是看不到Main的,所以这么玩就不行;找到App.g.cs这样的文件,Main代码藏在这里,对其进行相应改动。vs2005下自动找Main的小技巧:因为App类是分散类,所以右击函数定义,会找到两个地方,一个就是本页App.xaml.cs,另一个会定向到App.g.cs文件。

Example 1-3. A minimal msbuild project file
<!-- 1st.csproj -->
<Project
  DefaultTargets="Build"
  xmlns="http://schemas.microsoft.com/developer/msbuild 
/2003">
  <PropertyGroup>
    <OutputType>winexe</OutputType>
    <OutputPath>.\</OutputPath>
    <Assembly>1st.exe</Assembly>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="MyApp.cs" />
    <Reference Include="System" />
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
  </ItemGroup>
  <Import Project="$(MsbuildBinPath)\Microsoft.CSharp.targets" />
</Project>

1。就是把*.csproj 工程文件用记事本打开看到的东西啦。相应命令行msbuild。总之,是vs2005所原有的。
2。倒数第二行有点意思,查了一下别人的blog,

Microsoft.CSharp.targets位于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下

用记事本打开,是一个XML文件,记录了生成项目的所有步骤。

Example 1-5. A less minimal WPF application
// MyApp.cs
using System;
using System.Windows;

namespace MyFirstAvalonApp {
  class MyApp : Application {
    [STAThread]
    static void Main(string[] args) {
      MyApp app = new MyApp(  );
      app.StartingUp += app.AppStartingUp;
      app.Run(args);
    }

    void AppStartingUp(object sender, StartingUpCancelEventArgs 
 e) {
      // By default, when all top level windows
      // are closed, the app shuts down
      Window window = new Window(  );
      window.Text = "Hello, Avalon";
      window.Show(  );
    }
  }
}

1。这个例子有语法问题,可能是写书的时候还是WinFX,所以StartingUpCacalEventArgs事件应该改为StartUpEventArgs, 也可以不在Main里面做,
在App.xaml的Starting属性指定就可以了。Window还没有Text属性,相应的要改为window.Title

2。MyApp:Application
看到这里,不得不说了。其实WPF分为两种,一种是Window Application(C/S),使用Window标签;另一种是Browser Application(B/S),使用Page标签。但是WPF的Project,都用App.xaml文件作为入口,相应标签是Application,app.xaml中写Main函数,但是一般不可见,隐藏在app.g.cs文件中(分散类机制)。App.xaml的Application标签中,用StartupUri属性指定第一个打开的Form/Page是哪一个。具体的xaml语法见后。

Example 1-6. Window class declaring its own controls
// Window1.cs
using System;
using System.Windows;
using System.Windows.Controls; // Button et al

namespace MyFirstAvalonApp {
  class Window1 : Window {
    public Window1(  ) {
      this.Text = "Hello, Avalon";

      // Do something interesting (sorta)
      Button button = new Button(  );
      button.Content = "Click me, baby, one more time!";
      button.Width = 200;
      button.Height = 25;
      button.Click += button_Click;

      this.AddChild(button);
    }

    void button_Click(object sender, RoutedEventArgs e) {
      MessageBox.Show(
        "You've done that before, haven't you",
        "Nice!");
    }
  }

1。写到这里我要骂人了,初学者都会上当在这里。我是调试了半天没有成功。原因很简单,没有搞清楚vs2005自动生成的一些代码。一个是Main函数,不要用他的,自己写app.Run(new Window1);还有就是window的InitializeComponent方法所在那个部分类,全部mark掉,不用那个初始化方法,这样就不和加载新button冲突了。唉,其实vs也是好意,我们真正开发还是要用vs的,但是现阶段学习用例,确实vs会造成困惑。
2。其实还有一种等价写法,就是充分利用xaml中的声明,如<Button x:Name="button1",这样相应的后台可以直接使用这个button1对象——xaml语言等价于对象建模。而这种方法的实质就是vs2005自动生成的InitializeComponent方法,它是加载这个xaml文件,将其序列化为对象,加载到Application级别中,接下来就可以使用了。
3。例1.7——1.13讲的就是我上面所述的。总之这本书的写作顺序不对,应该指出来前面先不要用vs2005,而后讲vs的玩法及原理,最后再展示vs上开发的例子——这样就对了。

posted on 2015-11-13 17:16 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4962697.html

WPF笔记(1.1 WPF基础)——Hello,WPF!相关推荐

  1. “WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心

    2019独角兽企业重金招聘Python工程师标准>>> 近日微软公布了最新的WPF路线图,一片热议:对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread ...

  2. WPF PRISM开发入门一( 初始化PRISM WPF程序)

    原文:WPF PRISM开发入门一( 初始化PRISM WPF程序) 这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在G ...

  3. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置bindi ...

  4. 基于WPF的桌面宠物开发(一) :WPF简介+环境搭建+简单界面

    目录 一.WPF简介 1.什么是WPF? 二.WPF环境搭建 1.Visual Studio安装 2.安装 ".Net桌面开发" 工具包 3.新建WPF项目 4.导入WpfAnim ...

  5. WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口

    原文:WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/powertoolsteam/ar ...

  6. WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...

    目录 WPF的消息机制(一)-让应用程序动起来 WPF的消息机制(二)-WPF内部的5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭的消息窗口和系统资源通知窗口 (3)用于用户交互的可见窗口 (4) ...

  7. wpfのuri(让你完全明白wpf的图片加载方式以及URI写法)

    原文:wpfのuri(让你完全明白wpf的图片加载方式以及URI写法) 绝对 pack WPF URI pack://application:,,,/是协议:",,,"是" ...

  8. WPF老矣,尚能饭否——且说说WPF今生未来(中):策略

    本文接上文<WPF老矣,尚能饭否--且说说WPF今生未来(上):担心>继续. "上篇"中部分精彩的点评: 虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如 ...

  9. WPF 项目开发入门(三)WPF 窗体与页面

    WPF 项目开发入门(一) 安装运行 WPF 项目开发入门(二) WPF 页面布局 WPF 项目开发入门(三)WPF 窗体与页面 WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件 ...

最新文章

  1. CS190.1x-ML_lab1_review_student
  2. linux python syslog,Centos下python 对syslog重写进行日志记录
  3. 手机上用的是的WAP协议 电脑上的是HTTP协议 这两个有什么不同
  4. 变换上三角矩阵_关于马尔可夫矩阵的一些个人研究成果、思考过程及相关解释...
  5. Visual Studio“15”进一步改善性能和易用性
  6. linux内核是否支持nfs,嵌入式命令:查看设备是否支持nfs
  7. FTP and Firewalls
  8. 路由信息协议工作原理
  9. python爬虫 动作链进阶
  10. 华为数据之道学习分享
  11. vscode的code runner不生成临时文件
  12. 【废了-准备删除01】渗透测试靶机搭建——基于WAMP的drupal7.x管理系统
  13. 线性波传播至垂直壁面反射形成驻波的动画MATLAB程序
  14. 学计算机学生笔记本电脑实用,介绍四款适合学生党的笔记本电脑
  15. 如何将一个vector内容赋值给另一个vector C/C++
  16. 终极dos批处理循环命令详解
  17. 凌波微课|南农大资环学院钟山学术讲坛第五十四讲——特邀南京师范大学戴传超教授
  18. 3D打印机的故障检测及排除
  19. 适合零基础学习Python的书籍
  20. 知名互联网大厂——推荐算法工程师、专家、leader

热门文章

  1. BZOJ4562: [Haoi2016]食物链
  2. SX-BOX试用笔记
  3. Eclipse快捷键以及设置
  4. ASP.net Table 控件
  5. C++ cin.sync()和cin.ignore()
  6. python 多线程为什么鸡肋?
  7. ad如何镜像器件_使用 Dockerfile 制作镜像
  8. 产品认知:真正厉害的产品经理,都是“数据思维”的高手
  9. webclient无法获取html文件,C# WebClient获取网页源码的方法
  10. Java注释 link_Java 文档注释