成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WPF Dependency相關特點介紹

開發 開發工具
WPF Dependency屬性是一個比較特殊的屬性。對于初學者來說,可能對于這一屬性了解的程度還不是很高,希望通過這篇文章介紹的內容可以幫助大家認識這一屬性相關概念。

WPF開發工具的作用在實際編程中是非常有用的。我們可以通過平時的實踐去積累各種經驗來達到熟練運用的程度。本篇,我們再繼續看一種特殊的WPF Dependency屬性:Attached屬性。Attached屬性可以非常高效地Attach到其他的對象中。 #t#

我們仍然用前面的一個簡單XAML代碼為例:

  1. < Window> < StackPanel> 
  2. < Label>LabelText< /Lable> 
  3. < /StackPanel> < /Window>  

現在,如果需要對StackPanel及其子元素設置字體大小,應該如何做呢?在Window元素中,它有一個屬性FontSize,可以直接設置。但是,StackPanel自己本身并沒有FontSize這樣的屬性。這就該Attached屬性出場了。這里我們需要用定義在TextElement元素中的Attached屬性FontSize來設置StackPanel的字體。

  1. < Window> 
  2. < StackPanel TextElement.
    FontSize
    =”30”> 
  3. < Label>LabelText< /Lable> 
  4. < /StackPanel> < /Window> 

 這樣,StackPanel的子元素就能通過屬性值繼承得到新的FontSize屬性。對于這樣的XAML代碼,XAML編譯器或者解析器看到這種語法時,就要求TextElement(有時也稱為Attached屬性提供者)有相應的靜態方法SetFontSize來設置對應的屬性值。因此,上面的Attached屬性設置代碼,可以如下用C#實現:

  1. StackPanel panel = 
    new StackPanel(); 
  2. TextElement.SetFont
    Size(panel, 30); 

從這里的代碼可以看出,Attached屬性并不神秘。只是調用方法把元素和不相關的屬性關聯起來。而SetFontSize實現也比較簡單。它只是調用了WPF Dependency屬性訪問函數所調用的DependencyObject.SetValue方法。注意調用的對象是傳入的DependencyObject,而不是當前的實例:

  1. public static void SetFontSize
    (DependencyObject element, 
    double value)   
  2. {   
  3. element.SetValue(TextElement.
    FontSizeProperty, value);   

同樣地,Attached屬性也定義了對應的GetXXX函數。它調用的DependencyObject.GetValue方法:

  1. public static double 
    GetFontSize(Dependency
    Object element)   
  2. {   
  3. return (double)element.
    GetValue(TextElement.
    FontSizeProperty);   

與普通的WPF Dependency屬性一樣,這些GetXXX和SetXXX方法除了實現對GetValue和SetValue的調用,不能做任何其他額外的工作。

其實,在WPF應用中,Attached屬性更多的用來控制UI的布局。除了前面的StackPanel,還有Grid等等。

補充說明:上面的代碼還有一個問題需要說明。我們設置StackPanel的字體屬性時用的是TextElement元素。為什么不用其他的元素Control、Button呢?

這個問題的關鍵之處在于Dependency屬性的注冊方法。我曾在WPF Dependency屬性[1]做過簡單的說明。我們看看Element的FontSizeProperty屬性的注冊代碼:

  1. TextElement.FontSizeProperty = 
    DependencyProperty.RegisterAttached
    ( “FontSize”, typeof(double), 
    typeof(TextElement), new Framewor
    kPropertyMetadata( SystemFonts.
    MessageFontSize, FrameworkProperty
    MetadataOptions.Inherits | 
    FrameworkPropertyMetadataOptions.
    AffectsRender | FrameworkProperty
    MetadataOptions.AffectsMeasure), 
    new ValidateValueCallback
    (TextElement.IsValidFontSize)); 

這里與我們前面的IsDefault屬性類似,只是RisterAttached方法優化了Attached屬性需要的屬性元數據的處理過程。

另一方面,Control的FontSize屬性是在TextElement元素已經注冊的屬性之上調用AddOwner方法,獲取一個完全相同的實例引用:

  1. Control.FontSizeProperty = 
    TextElement.FontSizeProperty.
    AddOwner( typeof(Control), 
    new FrameworkPropertyMetadata
    (SystemFonts.MessageFontSize, 
    FrameworkPropertyMetadata
    Options.Inherits)); 

 

所以,在實現Attached屬性時我們使用的是TextElement,而不是Control等等。

我們為大家介紹的WPF Dependency就到這里了。

責任編輯:曹凱 來源: IT168
相關推薦

2009-12-24 10:09:33

WPF事件注冊

2010-04-07 17:56:49

Oracle位圖索引

2009-12-31 09:50:52

Silverlight

2009-12-29 10:22:34

WPF附加屬性

2009-12-28 13:47:35

WPF對話框

2009-12-24 15:22:10

WPF繼承自定義窗口

2009-12-28 17:48:01

WPF界面布局

2009-12-28 17:54:49

WPF嵌入式資源

2009-12-25 16:05:24

WPF 4.0特點

2009-12-28 11:41:04

WPF 3.5特點

2009-12-24 15:53:19

WPF API

2009-12-14 13:56:12

Ruby特點

2010-01-27 16:41:48

Android特點

2009-12-25 14:35:34

WPF布局

2009-12-25 10:05:06

WPF資源

2009-12-23 18:06:25

WPF模板

2009-12-24 14:18:57

WPF類型轉換

2009-12-25 11:04:51

WPF Border

2009-12-14 18:30:59

Ruby DSL特點

2010-02-23 09:51:32

WCF MTOM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色橹橹欧美在线观看视频高清 | 91看片网| 美女黄视频网站 | 中文字幕一区二区三区在线乱码 | 成人不卡一区二区 | 日韩在线视频播放 | 久久91精品| 一区视频在线播放 | 91 在线| 色播99 | 亚洲天堂av在线 | 二区三区视频 | 日韩中文字幕视频在线观看 | 特级生活片 | 精品1区2区3区 | 国产丝袜一区二区三区免费视频 | 欧美福利三区 | 免费看一级毛片 | 欧美日韩久久精品 | 黄色片网站在线观看 | 国产亚洲精品成人av久久ww | 日韩视频在线一区 | 特黄特色大片免费视频观看 | 久久网国产 | 国产高清一区 | 久久久久久久久久爱 | 18成人在线观看 | 久久一久久 | 亚洲电影一区二区三区 | 伊人网站 | 久久久女女女女999久久 | 色黄网站| 四虎精品在线 | 国产精品视频导航 | 久久久久亚洲精品国产 | www.99精品 | 欧美一级特黄aaa大片在线观看 | 四虎永久在线精品免费一区二 | 久久久久久成人 | 精品美女久久久久久免费 | 伊人av在线播放 |