WPF筆記(1.1 WPF基礎)——Hello,WPF!

bjq_ren發表於2008-08-09
 
WPF筆記(1.1 WPF基礎)——Hello,WPF!Example 1-1. Minimal C# WPF application
WPF筆記(1.1 WPF基礎)——Hello,WPF!
// MyApp.cs
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System.Windows; // the root WPF namespace
WPF筆記(1.1 WPF基礎)——Hello,WPF!

WPF筆記(1.1 WPF基礎)——Hello,WPF!
namespace MyFirstAvalonApp {
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
class MyApp {
WPF筆記(1.1 WPF基礎)——Hello,WPF!    [STAThread]
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
static void Main(  ) {
WPF筆記(1.1 WPF基礎)——Hello,WPF!      
// the WPF message box
WPF筆記(1.1 WPF基礎)——Hello,WPF!
      MessageBox.Show("Hello, Avalon");
WPF筆記(1.1 WPF基礎)——Hello,WPF!    }

WPF筆記(1.1 WPF基礎)——Hello,WPF!  }

WPF筆記(1.1 WPF基礎)——Hello,WPF!}

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檔案。

WPF筆記(1.1 WPF基礎)——Hello,WPF!Example 1-3. A minimal msbuild project file
WPF筆記(1.1 WPF基礎)——Hello,WPF!
<!-- 1st.csproj --&gt
WPF筆記(1.1 WPF基礎)——Hello,WPF!
<Project
WPF筆記(1.1 WPF基礎)——Hello,WPF!  DefaultTargets
="Build"
WPF筆記(1.1 WPF基礎)——Hello,WPF!  xmlns
="http://schemas.microsoft.com/developer/msbuild 
WPF筆記(1.1 WPF基礎)——Hello,WPF!
/2003">
WPF筆記(1.1 WPF基礎)——Hello,WPF!
  <PropertyGroup>
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<OutputType>winexeOutputType>
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<OutputPath>.\OutputPath>
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Assembly>1st.exeAssembly>
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
PropertyGroup>
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
<ItemGroup>
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Compile Include="MyApp.cs" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Reference Include="System" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Reference Include="WindowsBase" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Reference Include="PresentationCore" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
<Reference Include="PresentationFramework" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
ItemGroup>
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
<Import Project="$(MsbuildBinPath)\Microsoft.CSharp.targets" />
WPF筆記(1.1 WPF基礎)——Hello,WPF!
Project>WPF筆記(1.1 WPF基礎)——Hello,WPF!

1。就是把*.csproj 工程檔案用記事本開啟看到的東西啦。相應命令列msbuild。總之,是vs2005所原有的。
2。倒數第二行有點意思,查了一下別人的blog,

Microsoft.CSharp.targets位於C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目錄下
用記事本開啟,是一個XML檔案,記錄了生成專案的所有步驟。

WPF筆記(1.1 WPF基礎)——Hello,WPF!Example 1-5. A less minimal WPF application
WPF筆記(1.1 WPF基礎)——Hello,WPF!
// MyApp.cs
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System.Windows;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
WPF筆記(1.1 WPF基礎)——Hello,WPF!
namespace MyFirstAvalonApp {
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
class MyApp : Application {
WPF筆記(1.1 WPF基礎)——Hello,WPF!    [STAThread]
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
static void Main(string[] args) {
WPF筆記(1.1 WPF基礎)——Hello,WPF!      MyApp app 
= new MyApp(  );
WPF筆記(1.1 WPF基礎)——Hello,WPF!      app.StartingUp 
+= app.AppStartingUp;
WPF筆記(1.1 WPF基礎)——Hello,WPF!      app.Run(args);
WPF筆記(1.1 WPF基礎)——Hello,WPF!    }

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

WPF筆記(1.1 WPF基礎)——Hello,WPF!  }

WPF筆記(1.1 WPF基礎)——Hello,WPF!}

WPF筆記(1.1 WPF基礎)——Hello,WPF!

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語法見後。

WPF筆記(1.1 WPF基礎)——Hello,WPF!Example 1-6. Window class declaring its own controls
WPF筆記(1.1 WPF基礎)——Hello,WPF!
// Window1.cs
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System.Windows;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
using System.Windows.Controls; // Button et al
WPF筆記(1.1 WPF基礎)——Hello,WPF!

WPF筆記(1.1 WPF基礎)——Hello,WPF!
namespace MyFirstAvalonApp {
WPF筆記(1.1 WPF基礎)——Hello,WPF!  
class Window1 : Window {
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
public Window1(  ) {
WPF筆記(1.1 WPF基礎)——Hello,WPF!      
this.Text = "Hello, Avalon";
WPF筆記(1.1 WPF基礎)——Hello,WPF!
WPF筆記(1.1 WPF基礎)——Hello,WPF!      
// Do something interesting (sortaWPF筆記(1.1 WPF基礎)——Hello,WPF!)
WPF筆記(1.1 WPF基礎)——Hello,WPF!
      Button button = new Button(  );
WPF筆記(1.1 WPF基礎)——Hello,WPF!      button.Content 
= "Click me, baby, one more time!";
WPF筆記(1.1 WPF基礎)——Hello,WPF!      button.Width 
= 200;
WPF筆記(1.1 WPF基礎)——Hello,WPF!      button.Height 
= 25;
WPF筆記(1.1 WPF基礎)——Hello,WPF!      button.Click 
+= button_Click;
WPF筆記(1.1 WPF基礎)——Hello,WPF!
WPF筆記(1.1 WPF基礎)——Hello,WPF!      
this.AddChild(button);
WPF筆記(1.1 WPF基礎)——Hello,WPF!    }

WPF筆記(1.1 WPF基礎)——Hello,WPF!
WPF筆記(1.1 WPF基礎)——Hello,WPF!    
void button_Click(object sender, RoutedEventArgs e) {
WPF筆記(1.1 WPF基礎)——Hello,WPF!      MessageBox.Show(
WPF筆記(1.1 WPF基礎)——Hello,WPF!        
"You've done that before, haven't youWPF筆記(1.1 WPF基礎)——Hello,WPF!",
WPF筆記(1.1 WPF基礎)——Hello,WPF!        
"Nice!");
WPF筆記(1.1 WPF基礎)——Hello,WPF!    }

WPF筆記(1.1 WPF基礎)——Hello,WPF!  }

1。寫到這裡我要罵人了,初學者都會上當在這裡。我是除錯了半天沒有成功。原因很簡單,沒有搞清楚vs2005自動生成的一些程式碼。一個是Main函式,不要用他的,自己寫app.Run(new Window1);還有就是window的InitializeComponent方法所在那個部分類,全部mark掉,不用那個初始化方法,這樣就不和載入新button衝突了。唉,其實vs也是好意,我們真正開發還是要用vs的,但是現階段學習用例,確實vs會造成困惑。
2。其實還有一種等價寫法,就是充分利用xaml中的宣告,如

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15123181/viewspace-421590/,如需轉載,請註明出處,否則將追究法律責任。

相關文章