日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
WPF Dependency相關(guān)特點(diǎn)介紹

WPF開發(fā)工具的作用在實(shí)際編程中是非常有用的。我們可以通過平時(shí)的實(shí)踐去積累各種經(jīng)驗(yàn)來達(dá)到熟練運(yùn)用的程度。本篇,我們?cè)倮^續(xù)看一種特殊的WPF Dependency屬性:Attached屬性。Attached屬性可以非常高效地Attach到其他的對(duì)象中。 #t#

創(chuàng)新互聯(lián)專注于漳縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城開發(fā)。漳縣網(wǎng)站建設(shè)公司,為漳縣等地區(qū)提供建站服務(wù)。全流程按需開發(fā)網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

我們?nèi)匀挥们懊娴囊粋€(gè)簡(jiǎn)單XAML代碼為例:

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

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

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

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

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

從這里的代碼可以看出,Attached屬性并不神秘。只是調(diào)用方法把元素和不相關(guān)的屬性關(guān)聯(lián)起來。而SetFontSize實(shí)現(xiàn)也比較簡(jiǎn)單。它只是調(diào)用了WPF Dependency屬性訪問函數(shù)所調(diào)用的DependencyObject.SetValue方法。注意調(diào)用的對(duì)象是傳入的DependencyObject,而不是當(dāng)前的實(shí)例:

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

同樣地,Attached屬性也定義了對(duì)應(yīng)的GetXXX函數(shù)。它調(diào)用的DependencyObject.GetValue方法:

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

與普通的WPF Dependency屬性一樣,這些GetXXX和SetXXX方法除了實(shí)現(xiàn)對(duì)GetValue和SetValue的調(diào)用,不能做任何其他額外的工作。

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

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

這個(gè)問題的關(guān)鍵之處在于Dependency屬性的注冊(cè)方法。我曾在WPF Dependency屬性[1]做過簡(jiǎn)單的說明。我們看看Element的FontSizeProperty屬性的注冊(cè)代碼:

 
 
 
  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方法優(yōu)化了Attached屬性需要的屬性元數(shù)據(jù)的處理過程。

另一方面,Control的FontSize屬性是在TextElement元素已經(jīng)注冊(cè)的屬性之上調(diào)用AddOwner方法,獲取一個(gè)完全相同的實(shí)例引用:

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

所以,在實(shí)現(xiàn)Attached屬性時(shí)我們使用的是TextElement,而不是Control等等。

我們?yōu)榇蠹医榻B的WPF Dependency就到這里了。


本文題目:WPF Dependency相關(guān)特點(diǎn)介紹
文章鏈接:http://www.dlmjj.cn/article/dhgochj.html