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

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

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

ExpandedBlockStart.gifContractedBlock.gif
namespace MyFirstAvalonApp dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif  
class MyApp dot.gif{
InBlock.gif    [STAThread]
ExpandedSubBlockStart.gifContractedSubBlock.gif    
static void Main(  ) dot.gif{
InBlock.gif      
// the WPF message box
InBlock.gif
      MessageBox.Show("Hello, Avalon");
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}

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文件。

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

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

Microsoft.CSharp.targets位于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下
用记事本打开,是一个XML文件,记录了生成项目的所有步骤。

None.gifExample 1-5. A less minimal WPF application
None.gif
// MyApp.cs
None.gif
using System;
None.gif
using System.Windows;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
namespace MyFirstAvalonApp dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif  
class MyApp : Application dot.gif{
InBlock.gif    [STAThread]
ExpandedSubBlockStart.gifContractedSubBlock.gif    
static void Main(string[] args) dot.gif{
InBlock.gif      MyApp app 
= new MyApp(  );
InBlock.gif      app.StartingUp 
+= app.AppStartingUp;
InBlock.gif      app.Run(args);
ExpandedSubBlockEnd.gif    }

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

ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}

None.gif

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语法见后。

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

ExpandedBlockStart.gifContractedBlock.gif
namespace MyFirstAvalonApp dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif  
class Window1 : Window dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Window1(  ) dot.gif{
InBlock.gif      
this.Text = "Hello, Avalon";
InBlock.gif
InBlock.gif      
// Do something interesting (sortadot.gif)
InBlock.gif
      Button button = new Button(  );
InBlock.gif      button.Content 
= "Click me, baby, one more time!";
InBlock.gif      button.Width 
= 200;
InBlock.gif      button.Height 
= 25;
InBlock.gif      button.Click 
+= button_Click;
InBlock.gif
InBlock.gif      
this.AddChild(button);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
void button_Click(object sender, RoutedEventArgs e) dot.gif{
InBlock.gif      MessageBox.Show(
InBlock.gif        
"You've done that before, haven't youdot.gif",
InBlock.gif        
"Nice!");
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#入门系列——类和对象的代码实现

面向对象 说起面向对象&#xff0c;大家因该都听说过&#xff0c;也知道是一个编程的方法&#xff0c;简称oop技术。它将对象的算法和数据结构看作一个整体&#xff0c;而一个程序就是由多个对象结合的整体。这样做可以提高代码的复用率&#xff0c;提高了软件的可维护性。 属性…

安卓TCP通信版本2

PC做服务器&#xff0c;安卓做客户端。 安卓获取输入框的内容并发送&#xff0c;然后等待接收服务器的消息 服务器先行开启&#xff0c;接收到客户端的数据&#xff0c;然后回复消息。 实现了对线程类的封装&#xff0c;通过按钮启动线程发送并接收 服务器代码&#xff08;java…

Win32ASM学习[5]: 数据对齐相关的伪指令(ALIGN、EVEN、ORG)

32 位的寄存器容量是 4 字节, 如果内存中的数据都按 4*n 字节对齐, 肯定会加快吞吐速度; 但事实并非如此, 不同大小的数据可能会让寄存器别别扭扭地去处理, 从而降低了运行速度! 如果使用对齐, 就会浪费掉一些内存空间; 其实这是一个需要权衡 "速度" 与 "内存&…

常用Jquery前端操作

input只能输入正整数 οnkeyup"this.valuethis.value.replace(/\D/g,)"if(!confirm("删除后无法恢复&#xff0c;确认继续&#xff1f;")){return false;}//判断字符串里是否存在指定字符 if(str.indexOf("abc") ! -1){//表示存在}1.双引号替换…

【Linux/Ubuntu学习 10】unbuntu 下 eclipse 中文乱码的解决

wangddwdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加&#xff1a; zh_CN.GBK GBKzh_CN.GB2312 GB2312 终端执行命令&#xff1a; sudo dpkg-reconfigure --force localesGenerating locales... en_AG.UTF-8... done en_AU.UTF-8... done en_BW.UTF-8... done …

Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS

PTR: 指定要操作的数据尺寸 ------------------------------------------------------------------------------------------------------------------------------------------ .386 .model flat, stdcall include windows.inc include kernel32.inc include masm…

简述WebService的使用(一)

环境&#xff1a; vs版本&#xff1a;vs2013 windows版本&#xff1a;win7 IIS版本&#xff1a;IIS7.0 &#xff08;如果觉得对您有用&#xff0c;请点击右下角【推荐】一下&#xff0c;让更多人看到&#xff0c;谢谢&#xff09; 配置环境&#xff1a; 主要针对于IIS 首先&…

【Java基础】用LinkedList实现一个简单栈的功能

栈的基本功能 栈的最基本功能是保障后进先出&#xff0c;然后在此基础上可以对在栈中的对象进行弹入弹出&#xff0c;此外&#xff0c;在弹出时&#xff0c;如果栈为空&#xff0c;则会报错&#xff0c;所以还需要提供获取当前栈大小的方法。 构造存储对象Student /*** Created…

Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)

关于符号常量 的例子 .386 .model flat,stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data n 1 ; 伪指令只能定义整数或整数表达式…

oracle 删除表中重复记录,并保留一条

1、查找表中多余的重复记录&#xff0c;重复记录是根据单个字段&#xff08;Id&#xff09;来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、删除表中多余的重复记录&#xff0c;重复记录是根据单个字段&#xff08;Id&#x…

透过WinDBG的视角看String

摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的. 本文将侧重在通过WinDBG来观察String在进程内的布局, 以此来解释C# String的一些特性. 问题 C# Stri…

Win32ASM学习[8]: 进制转换的库函数

在 masm32.inc 中有这样几个函数的声明: byt2bin_ex PROTO :BYTE, :DWORD wrd2bin_ex PROTO :WORD, :DWORD dw2bin_ex PROTO :DWORD, :DWORD dw2hex_ex PROTO :DWORD, :DWORD bin2byte_ex PROTO :DWORD -------------------------------------------------------------…

SOJ 2800_三角形

真的是O不是0【看了discuss才发现。。。。。一个大写的蠢 【题意】多个黑白三角形组成的倒三角&#xff0c;求白三角形组成的最大倒三角的面积 【分析】由于问的是倒三角个数&#xff0c;所以只需看与行数奇偶性相同的白色倒三角形&#xff0c;设v[i][j]为以第i行第j列的倒三角…

ueditor富文本编辑器 修改框宽度和高度的方法

在使用ueditor的时候&#xff0c;用的textarea <textarea name"content" id"myEditor">这里写这条规则的回复内容</textarea> 给它加style"width:300" 属性的时候&#xff0c;发现不起作用。 正确的方法应该是&#xff1a; <scri…

Win32ASM学习[9]: 标志寄存器

TF(Trap Flag)——位8&#xff0c;跟踪标志。置1 则开启单步执行调试模式&#xff0c;置0 则关闭。在单步执行模式下&#xff0c;处理器在每条指令后产生一个调试异常&#xff0c;这样在每条指令执行后都可以查看执行程序的状态。如果程序用POPF、POPFD 或者ET 指令设置TF 标志…

TCP多进程并发服务端 Linux socket编程入门(2)

这里很简单的使用了fork()函数&#xff0c;在执行了fork()以后的所有代码都会由子进程和父进程同时执行。 他们同时拥有相同的资源&#xff08;两份拷贝&#xff09;&#xff0c;所以在子进程执行的过程中&#xff0c;子进程需要先close掉listenfd&#xff08;监听套接字&#…

ArcEngine 打开shape文件

IWorkspaceFactory wsf new ShapefileWorkspaceFactory(); IWorkspace pWorkspace wsf.Open(filePath, 0) ;//filePath为shapefile所在的文件夹 IFeatureWorkspace pFeatureWorkspace pWorkspace ; IFeatureClass pFeatureClass pFeatureWorkspace.OpenFeatureClass(&quo…

Win32ASM学习[10]:传送指令

汇编指令的一般性要求: 1、两个操作数的尺寸必须一致; 2、操作数不能同为内存. --------------------------------------------------------------------------------------------------------------- ;mov ;该指令不影响 EFlags ;指令格式: (其中的 r、m、i 分别表示: 寄存器、…

SQL Server 中关于 @@error 的一个小误区

SQL Server 中关于 error 的一个小误区 原文:SQL Server 中关于 error 的一个小误区在SQL Server中&#xff0c;我常常会看到有些前辈这样写&#xff1a; if(error<>0)ROLLBACK TRANSACTION T elseCOMMIT TRANSACTION T 一开始&#xff0c;我看见别人这么写&#xff0c;我…

Win32ASM学习[11]:逻辑运算

--------------------------------------------------------------------------------------------------------------------------- 一.逻辑与运算指令 AND 格式: AND OPRD1,OPRD2其中目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数、任一通用寄存器…