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.pswp.cn/news/375383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375383.shtml
英文地址,請注明出處:http://en.pswp.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為立即數、任一通用寄存器…