2011-10-13 69 views
2

我正在學習WPF的概念,例如數據綁定,命令,資源,元素綁定,樣式等,它們廣泛地使用標記擴展,並且我有問題了解背後的含義標記類,因爲它們的使用超出了我理解它們應該使用的範圍。因此,這裏有幾點我需要明確: (所有的代碼片段都來自臨WPF在C#2010本書)難以理解和使用xaml標記擴展

  1. 的含義是什麼,並使用靜態擴展?它可以用來 聲明靜態資源,可以聲明爲 ,但此XAML混淆了我:

    <Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" > 
    

    {X:靜態SystemColors.ActiveCaptionBrush},什麼是在這裏靜態角色 ,以及如果我在這裏使用x:Dynamic,會發生什麼變化?該 書上說這XAML相當於這個隱藏代碼:

    cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;

    這意味着,如果我有靜態屬性的類,我應該 能夠使用這樣的事情:

    <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" > 
    

    但它沒有工作,儘管我創建了一個類,我嘗試使用 本地:靜態(指本地命名空間),但VisualStudio 不允許我使用它。這是什麼實現 的正確方法?

  2. 綁定的含義是什麼(超越明顯的含義,什麼是 發生在我綁定時)?它用於資源綁定,或數據或元素綁定。我能夠理解元素綁定,但綁定到不是元素的對象導致問題。對於 例如:

    <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, 
    Path=Source}"></TextBlock> 
    

    這是有約束力的文本到SystemFonts.IconFontFamily 財產,有什麼用X:靜態在這種情況下,如何將它綁定 的財產類我創造了什麼?還有如何更新 文本屬性的文本字段,如果綁定 目標的值發生變化?由於綁定,它應該自己更新,這是 的情況下?

    本書中的所有示例都使用SystemFonts.IconFontFamily, 沒有我見過的解釋了這種綁定的用法,以及如何爲我創建的類執行此操作?在這方面的一些幫助是 需要。我想問一下關於綁定的更多信息,但我會在關於綁定的單獨問題 中這樣做。

  3. 最後,推薦一本書或資源,解釋什麼是 發生的事情,而不是如何做到這一點?

回答

3

答案....

1)

你說......


...這意味着,如果我有靜態屬性的類,我應該是 能夠使用類似這樣的東西:

<Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" > 

但它沒有工作,儘管我創建了一個類,我嘗試使用 地方:靜態(指本地命名空間),但VisualStudio的 沒有讓我使用它。這是什麼實現 的正確方法?


嗯,你的審判的嘗試是正確的,但它是不正確的,你已經應用了哪些術語,命名空間令牌.... local命名空間令牌適用於下它宣佈這樣的類...

<Button ... Foreground="{x:Static local:MyClass.SomeStaticProperty}" > 

只要SomeStaticProperty是有效的Brush就應該工作得很好。

在這個例子中,整個標記爲內部相當於Binding爲...

Binding.Source = {x:Type local:MyClass} 
    Binding.Path = SomeStaticProperty. 

2)

你有一個例子...


<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},  
          Path=Source}"> 
    </TextBlock> 

所以使用相同的例如從1當量,並將其應用到這個例子...

<TextBlock Text="{Binding Source={x:Type SystemFonts},  
           Path=IconFontFamily.Source}"> 
    </TextBlock> 

3)

我從MSDN瞭解到這件事......我不認爲我們可以比任何其他合法來源。

+0

感謝您的回答! – SpeedBirdNine