熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows優化 >> 正文

使用新的代碼和標記模型創建真實的應用程序

2022-06-13   來源: Windows優化 

  競爭接口
  Avalon 是下一版本的 Windows(代號 Longhorn)的一部分主要由添加到 NET 框架中新的類集合組成目前用於 Avalon 編程的最重要的新命名空間有多個名稱例如MSAvalonWindowsMSAvalonWindowsControls 和 MSAvalonWindowsMedia(在 Longhorn 最終發布之前這些名稱將進行更改)有了 Avalon您就可以利用 C#Visual Basic® NET 或者任何其他支持 NET 公共語言規范 (CLS) 的語言編寫應用程序這些程序與目前可編寫的 Windows 窗體應用程序頗為相似Avalon 的標准部分
  
  另外Avalon 還會定義一個可在 Longhorn 中使用的新標記語言其代號為 XAML(可擴展應用程序標記語言讀作 zammel可以使用 XAML 來定義文本圖像和控件的布局這與使用 HTML 非常相似因為基於 XML所以 XAML 的語法比 HTML 更嚴謹更明確預計大部分的 XAML 均可通過可視化設計程序由計算機生成但是(最初)手工編寫自己的 XAML 會是一次絕佳的學習體驗
  
  大多數寫入 Avalon 的應用程序均可能同時包含程序代碼和 XAML您將使用 XAML 定義應用程序初始的可視界面並編寫用於實現其他功能的代碼您可以將程序代碼直接嵌入到 XAML 中也可以將它保留在一個單獨的文件內能夠用 XAML 實現的所有功能均可以通過程序代碼實現因此根本無需使用任何 XAML 也有可能編寫程序但是反之則不行許多任務只能通過程序代碼完成因此只有最簡單的應用程序才會只包括 XAML下面是某個 XAML 的一小段代碼
  
  <Button Background=LightSeaGreen FontSize=pt>
  Calculate
  </Button>
  
  該片斷是一個 XML 元素包括一個開始標記一個結束標記以及這兩個標記之間的內容該元素的類型是 Button開始標記還包括了兩個屬性規范這兩個屬性的名稱為 Background 和 FontSize它們被指定了屬性值根據 XML 的要求這些值必須用單引號或雙引號引起來開始標記和結束標記之間是元素內容(在本例中是顯示在按鈕表面上的文本)
  
  此 Button 元素不包括寬度或高度通常Avalon 中的按鈕和其他控件會根據其內容自動調整大小(當然您可以重寫該行為)在本例中Button 的大小被設置為足以容納 磅字體的 Calculate 文本字符串此 Button 元素也不包括坐標位置通常控件在運行時會根據窗口和控件的大小在窗口中動態定位
  
  XAML 與 Avalon 類庫緊密相關可以在 XAML 中使用的每種元素實際上都是一個類特別是在 MSAvalonWindows 命名空間中聲明的 UIElement 或 ContentElement 類的子代Control 是 UIElement 的子代之一所有公共用戶接口控件(例如按鈕滾動條列表框編輯字段等)均源自 Control從 ContentElement 派生的類包括 Bold 和 Italic
  
  在 XAML 開始標記中指定的屬性名實際上是這些類的屬性屬性在 NET 框架中總是扮演著重要的角色而在這裡扮演的角色則更為重要如果您還沒有任何 NET 框架的編程實踐也應該知道屬性是類的成員就像方法和字段一樣在使用過程中它們好象與字段相似但是它們的實現更接近於方法不同於字段屬性是包含代碼的屬性是可讀的可寫的或二者兼有一個名為 Background 的讀/寫屬性基本上等同於 set_Background 和 get_Background 這一對對稱方法
  
  當然現代的程序員希望知道我是否可以將自己的類用作 XAML 元素?答案是當然可以出於某種原因XAML 被稱為可擴展應用程序標記語言任何一個具有公共的無參數的構造函數以及可設置屬性的類均可在 XAML 中使用
  
  我剛才展示的 Button 元素相當於一段完成以下操作的代碼創建一個 Button 類型的對象然後對 BackgroundFontSize 和 Content 屬性進行賦值等效的 C# 代碼如下所示
  
  Button btn = new Button();
  btnBackground = BrushesLightSeaGreen;
  btnFontSize = new FontSize( FontSizeTypePoint);
  btnContent = Calculate;
  
  正如您所看到的那樣在 XAML 中定義該對象大大簡化了對這三個屬性賦值的過程Brushes 類由所有預定義顏色(與 HTML 中通常支持的顏色相同)的靜態屬性組成FontSize 是一個結構其中封裝了獨立於單位的度量FontSizeType 是一個枚舉無論屬性被定義為字符串整數浮點值布爾值枚舉還是某種其他類型等效的 XAML 屬性都只是被賦予一個文本字符串
  
  Content 屬性指出在按鈕表面上顯示的內容並與 XAML 中 Button 元素的內容相對應這表明還可以按以下方式編寫 Button 元素
  
  <Button Background=LightSeaGreen FontSize=pt Content=Calculate>
  </Button>
  
  因為此 Button 元素設置了 Content 屬性而且在它的開始標記和結束標記之間不再包括任何內容所以可將它寫為空元素標記
  
  <Button Background=LightSeaGreen FontSize=pt Content=Calculate />
  
  注意該元素結尾處的結束斜槓
  
  在本例中Content 似乎是 string 類型的屬性但這並不是問題的全部Content 屬性聲明為類型對象強烈建議按鈕的內容不必局限於簡單的文本字符串例如它可以是 Image 元素
  
  <Button> <Image Source=Calcjpg/> </Button>
  
  如果您希望自己的按鈕既顯示文本又顯示圖像則可以包括
  
  <Button>
  Calculate
  <Image Source=Calcjpg/>
  </Button>
  
  文本和圖像元素將並排出現(這樣的元素通常是指父 Button 元素的子元素)Button 元素不支持更復雜的布局特性但如果需要它也是可用的訣竅是將 Button 的內容指定為支持靈活布局選項的 XAML 元素(例如Text)下例中的按鈕其內容是一個 Text 元素該元素中又包含一個圖像一個分行符和一個文本字符串
  
  <Button FontSize=pt>
  <Text>
    <Image Source=Calcjpg/>
    <LineBreak/>
    Calculate
  </Text>
  </Button>
  
  LineBreak 元素等同於 HTML 中的 <br>能夠顯示下方具有文字的圖像的按鈕更適用於工具欄您可以用某種斜體文本格式使該按鈕更生動一些
  
  <Button FontSize=pt>
  <Text>
   <Image Source=Calcjpg/>
   <LineBreak/>
   Calculate <Italic>this</Italic>
  </Text>
  </Button>
  
  該示例很好地說明了標記語言中的內容看上去非常自然但是用代碼表示時卻相當不方便的一面實際上您可以在代碼中指定所有這些元素但是您為什麼要這樣做呢?
  
  既然您對 XAML 有了一些了解那麼現在就讓我們來看一些完整的程序吧 顯示了傳統的 Hello World 程序的簡單 XAML 實現在 XML 中只允許使用一個根元素而在 XAML 中這個根元素通常是輸出圖面TextPanel 是一個輸出圖面它提供類似於 HTML 的自動布局通常對於應用程序的每一頁都有一個 XAML 文件(如果應用程序確實有多個頁)而且對於每個對話框也都有一個 XAML 文件有一個名為 Styles 的功能(我將在以後對此稍加討論)有助於在您的程序中保持一致的視覺樣式
  
  TextPanel 元素中 xmlns(XML 命名空間)屬性的功能與 C# 中使用指令所實現的功能相同因為 XAML 文件中的所有元素都映射到了 Microsoft NET 框架中的等效類所以 xlmns 屬性提供了一個指向某個文件的 URI該文件會列出在其中聲明這些類的 NET 命名空間的名稱
  
  僅僅為了使 Hello World 程序更加吸引人我向 TextPanel 元素中添加了幾個屬性來設置顏色和字體並指定該元素的子元素在面板中水平居中TextPanel 元素的內容是字符數據 Hello world!其內容中還可以包括圖像控件更多的文本等
  
  由於其中沒有代碼因此您可以將 HelloWorldxaml 文件直接加載到 Microsoft Internet Explorer 的 Longhorn 版本中然後您將看到類似於一個 Web 頁的內容還可以使用一個目前稱作 MSBuild 的程序來編譯 HelloWorldxaml進行這種編譯時還需要兩個其他的短文件(此處未顯示)其中一個擴展名為 PROJ 或 MSPROJ 的文件會提供有關該程序的一些信息並列出所有必需的源文件(XAML 以及其他文件)還需要另外一個 XAML 短文件來指出執行該程序時首先顯示哪個 XAML 頁運行 Hello World 的可執行文件您將看到一個類似於 Windows 程序的內容 同時顯示了這兩個版本
  
 educitycn/img_///gif>

  
Hello World 作為頁面和作為程序

  圖 顯示了與此程序幾乎等效的 C# 版本(我之所以說幾乎等效是因為 MSBuild 能夠拋出 C# 代碼但是這不是它所拋出的全部內容我的版本更容易理解一些)您可以按照以下方式在命令行上編譯該程序
  
  csc /r:WindowsBasedll;PresentationCoredll;PresentationFrameworkdll
  
  有經驗的 Windows 窗體用戶會發現該程序的結構和外觀似乎有些熟悉該程序負責在創建 TextPanel 對象之前顯式創建一個應用程序對象和一個窗口對象在該程序的 XAML 版本中這些預備作業是隱含的
  
  此 C# 代碼的奇怪之處涉及到在窗口中顯示的文本字符串在 Windows 程序中通常需指定要顯示文本的坐標位置但是 Te
From:http://tw.wingwit.com/Article/os/youhua/201401/30203.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.