1. 程式人生 > >XAML中的屬性和事件

XAML中的屬性和事件

XAML中的屬性和事件

迄今為止,你已經討論了一個沒啥意思的例子—有一個空柵格控制元件的空白頁面。在繼續學習之前,介紹一個包含更多元素的真實頁面是有必要的。圖2-1顯示了一個自動回答問題的例子。

(圖2-1

eight ball頁面包括四個元素:一個柵格(在銀光中用來安排佈局的最常用的工具),兩個文字框物件和一個按鈕。被用來安排和配置這些元素的標記語言比上一個例子更加引人注目了。下面是一個用省略號的小型程式碼來說明整體結構:

<UserControl x:Class="EightBall.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Width="400" Height="300">

<Grid x:Name="grid1">

<Grid.Background>

...

</Grid.Background>

<Grid.RowDefinitions>

...

</Grid.RowDefinitions>

<TextBox x:Name="txtQuestion" ... >

</TextBox>

<Button x:Name

="cmdAnswer" ... >

</Button>

<TextBox x:Name="txtAnswer" ... >

</TextBox>

</Grid>

</UserControl>

在下面的章節中,你將探索這個文件的內容並且學到XAML的語法。

簡單的屬性和型別轉換

就像你看到的,一個XML元素的特性設定相對應的銀光物件的屬性。比如,在eight ball這個例子中文字框配置了alignment, marginfont屬性:

<TextBox x:Name="txtQuestion"

VerticalAlignment

="Stretch" HorizontalAlignment="Stretch"

FontFamily="Verdana" FontSize="24" Foreground="Green" ... >

為了工作起來,System.Windows.Controls.TextBox類必須提供下面的屬性:VerticalAlignment, HorizontalAlignment, FontFamily, FontSizeForeground。在下面的章節中你將學到每一個屬性的意思:

提示:有一些特殊的字元不能直接寫入屬性字串,包括quotation 標記,&符號還有兩個<>尖括號。為了用這些值,你必須用相等的XML字元來替換它們。用&quot;替換quotation 標記,&amp; 替換&, &lt;替換< (小於) 字元, &gt; 替換 > (大於) 字元。當然,這些限制是XML的細節,它並不影響你在程式碼中設定屬性。

為了讓屬性系統工作,XAML直譯器需要處理比你想象的更多的工作。XML特性的值通常是一個簡單的字串,但是物件的屬性可以是任何.NET型別。在上面的例子中,有兩個屬性列舉型(VerticalAlignment HorizontalAlignment),一個字串(FontFamily),一個整形(FontSize),還有一個Brush 物件 (Foreground)

為了跨越字串型和非字串型的鴻溝,XAML直譯器需要進行轉換。這種轉換是被型別轉換器執行的,它是從完整的.NET框架中借用過來的基礎部件。

本質上說,型別轉換器在生命週期中扮演一個角色——它提供一套有用的方法,可以吧一個特定的.NET資料型別正向和反向轉換到任何.NET的型別,比如在這個例子中的字串。XAML直譯器由兩步來發現型別轉換器:

1、它檢測屬性的宣告,搜尋型別轉換器屬性。(如果有,型別轉換特性命令相關類處理轉換)比如,當你用屬性Foreground.NET就檢測Foreground屬性的宣告。

2、如果在屬性宣告中沒有型別轉換器特性,XAML直譯器檢測相應資料型別的類的宣告。比如,Foreground屬性用了Brush物件。Brush類(和它的派生類)用到了Brush轉換器(typeof(BrushConverter))特性的宣告。

3、如果在屬性宣告和類的宣告中沒有相關的型別轉換XAML將生產錯誤。

這個系統是簡單但很柔性的。如果在類的層次你設定了型別轉換器,就可以在用這個類的時候轉換所有的屬性。另一方面,如果你想對特殊的屬性進行調整型別轉換的方式,你可以在屬性宣告中用型別轉換器予以替換。

在程式碼中使用型別轉換器在技術上是可行的,但是語法有些麻煩。通常最好的辦法是直接設定屬性——這樣不僅很快,而且可以避免打字的潛在錯誤,而這種錯誤在執行前是難以撲捉的。對這個問題XAML沒有反映因為XAML是在編譯時才解析和驗證的。

註釋XAML, 象所有基於XML的語言都是區分大小寫的,這意味著你不能用 <button> 替換<Button>。然而型別轉換通常不區分大小寫,這意味著Foreground="White"Foreground="white" 有同樣的結果。

複雜屬性

相關推薦

XAML屬性事件

XAML中的屬性和事件 迄今為止,你已經討論了一個沒啥意思的例子—有一個空柵格控制元件的空白頁面。在繼續學習之前,介紹一個包含更多元素的真實頁面是有必要的。圖2-1顯示了一個自動回答問題的例子。 (圖2-1) eight ball頁面包括四個元素:一個柵格(在銀光中用來

WPFUserControl的屬性事件

        WPF中自定義控制元件有兩種,一種是繼承自control的自定義控制元件,另一種是繼承自UserControl的使用者控制元件。使用者控制元件可以認為是一系列原生控制元件的集合。本文主要介紹如何建立一個使用者控制元件,以及使用者控制元件的自定義屬性和事件

23、C#:窗口的屬性事件詳解

c#在C#語言編程中,每一個圖形組件都有自己的屬性、方法和事件。就像易語言一樣。我們學習易語言,用的是中文,一看便知。但是,C#語言的屬性、方法和事件都是英文的。許多時候,就是因為不知道英文單詞的意思,我們就只好放棄了學習。這裏,我就把C#裏面窗口的屬性和事件的英文做個翻譯後的詳細解釋。屬性是分類的,我先寫分

27、C#裏面組合框ComboBox的屬性事件

c#組合框也就是我們通常所說的下拉列表框。既然是下拉列表框,就要向下拉列表框裏面添加數據。數據的添加就要通過屬性:Items來進行添加。點擊該屬性後,就會彈出一個對話框,然後就可以向裏面添加內容了。添加後的效果如下:比如添加:春、夏、秋、冬給下拉列表框添加了內容,就要給下拉列表框添加一個選項的選中事件,並將選

[轉] JavaScript控制瀏覽器全屏及各種瀏覽器全屏模式的方法、屬性事件

script ati 保持 num adding html5 美國 bre art [From] http://www.jb51.net/article/76695.htm HTML 5中的full screen,目前可以在除IE和opera外的瀏覽器中使用 ,有的時候

CLR via C#學習筆記-第六章-CLR如何調用虛方法、屬性事件

style err rri 實參 寫代碼 調查 pre 好的 屬性 6.6.1 CLR如何調用虛方法、屬性和事件 本節重點是方法,但討論也與虛屬性和虛事件密切相關。屬性和事件實際作為方法實現,以後的章節會討論他們。 方法 方法代表在類型或類型的實例上執行某些操作的代碼。

靈活使用標籤的data自定義屬性事件物件

如果需要動態的給每一個標籤新增一樣的事件,且只有對應的內容改變,則可以通過data事先定義好要用的資料,然後通過事件物件獲取,data自定義屬性可以是一個字串或者是一個物件 形如:    data-address=“中華人民共和國”   data-sta

C#委託事件的區別

大致來說,委託是一個類,該類內部維護著一個欄位,指向一個方法。事件可以被看作一個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。   □ 通過委託執行方法 class Program { st

video 屬性事件用法大全

1、video 屬性 <!-- video 不支援 IE8及以下版本瀏覽器,支援三種視訊格式:MP4,WebM 和 Ogg --> <video src="test.mp4" controls width="400" height="300"></video>

HTML5標籤屬性事件控制代碼

HTML5元素通用屬性表 class、id、lang、style、title accesskey、 contenteditable、contextmenu、dir、 draggable、hidden、spellcheck、tabindex HTML5元素

AJAX——XMLHttpRequest物件主要屬性事件

 readyState屬性 有5個取值:0、1、2、3、4,表示HTTP請求的狀態和伺服器的響應。此屬性的值一般不會遞減,除非在正在進行的請求中呼叫了abort()或open()方法。理論上,每當這個屬性的值發生變化時都會觸發readyStateChange事件,但實際上,

OC屬性成員變數的區別使用

    當我們在一個程式中宣告一個變數,是將它宣告為成員變數呢還是封裝成屬性呢?     上網查了一查,再加上自己的理解,整理如下:     首先分別介紹一下成員變數和屬性     1) 成員變數 如下一段程式碼 #import <Foundation/Found

Scala 類屬性屬性生成的方法的區別

眾所周知,Scala 是運行於Java平臺(Java虛擬機器)的,那麼Scala程式編譯之後會生成對應的位元組碼檔案,我們將位元組碼檔案反編譯成Java檔案即可知Scala 為我們都做了什麼. 首先

怎樣在程式獲得ocx控制元件的所有屬性,方法事件

轉自https://zhidao.baidu.com/question/1671165051357872747.html 使用 #import "c:\winnt\system32\tlbinf32.dll" 匯入TypeLib information庫,該庫提供了類來獲取一個 active d

C#自定義控制元件隱藏基類成員(屬性、方法事件)的方法

       編寫自定義控制元件時,總是繼承C#中提供的Control類,而Control類是C#中所有窗體控制元件的基類,裡面定義了大量的屬性、方法和事件,而很多基類成員在自定義控制元件中可能不需要,因為編寫者會希望在自定義控制元件中隱藏這些成員,避免使用者呼叫這些成員。

asp.net a標籤href=“#”屬性 onclick()事件詳解

這幾天做網站專案中遇到一個問題,就是在巢狀網站的時候發現不管onclick()跳轉到任何頁面,都會重新整理當前頁面,後來我才發現,是a標籤搞的鬼, 1:a標籤中href=“#”是指跳轉到當前頁面,所以重新整理的就是你的當前頁面,而同時存在onclick,href的時候會首先

【2017-05-21】WebForm跨頁面傳值取值、C#服務端跳轉頁面、 Button的OnClientClick屬性、JsgetAttribute超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

jQuery事件對象的屬性方法

行為 class down 接受 觸發 觸發事件 this 右鍵 lan jQuery事件對象的屬性和方法 事件對象的屬於與方法有很多,但是我們經常用的只有那麽幾個,這裏我主要說下作用與區別 event.type:獲取事件的類型 觸發元素的事件類型 $("a").cli

JQuery的Dom操作事件

表單 lba app 選擇 ava return server pen log (一)JQuery中的事件 1.常規事件,把js事件中的on去掉   復合事件:hover(function(){},function(){}) ---- 相當於把鼠標移入移出事件和在一起執行

23.python的類屬性實例屬性

ash ron huang ant pass iou cli ict bin %E5%9C%A8myeclipse%E4%B8%AD%E4%BD%BF%E7%94%A8maven%E5%89%8D%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E5