2010-01-29 40 views
5

雖然在資源字典定義風格,你可以使用WPF風格:X之間的差異:名稱和X:類型

x:Name="xyz" 

x:Type="xyz". 

,可以在XAML像{StaticResource的引用此風格XYZ}。

大多數例子都使用'x:Key','name'和'key'之間的區別在於使用'x:name'可以讓你使用這個樣式定義代碼隱藏嗎?

修復: 問題是完全錯誤的。打算要問的是x:Key和x:Name之間的區別。但是我自己並沒有去嘗試這個代碼,而只是依賴於回憶 - 我以爲我在ResourceDictionary中都有這兩個錯誤。我也沒有這樣的代碼

<xxx.Resources > 

部分,因爲它也不工作。您不能引用沒有x:Key(x:Name在此不起作用)的Style,並且添加兩個不帶x:Key的樣式,因爲它們在字典中都獲得相同(空?)鍵,所以會引發異常。

Ray以一種非常好的方式把所有的差異都表達出來了,謝謝。
我的錯誤

+0

這是一個技巧性的問題 – 2010-01-29 19:41:23

回答

9

這是一個有趣的問題。

  • x:Type="xyz"是無效的XA​​ML語法:事實上,你不能在ResourceDictionary中使用任何

    x:Type="xyz" 
    

    x:Name="xyz" 
    

    這裏是差限定的樣式。

  • x:Name="xyz"實際上是有效的XAML語法,它命名對象(影響代碼隱藏的生成),但不提供字典密鑰。
  • x:Key="xyz"也是有效的XAML語法,它提供字典鍵但不命名對象。

在字典的關鍵是必需的,所以你必須指定x:Key(除了用於FrameworkTemplate及其子類的關鍵可以從TargetType的或數據類型推斷)。在字典中,如果需要,您也可以指定x:Name,但它不會影響密鑰。

請注意,x:Type是由XAML預定義的標記擴展,而x:Namex:Key是實際的XAML關鍵字。所以x:Type只能在標記擴展語法被用作屬性的值:

something="{x:Type whatever}" 

x:Namex:Key是能夠在元件中使用的屬性。

+2

這是一個雙重技巧的問題,因爲實際**他們都不工作**。您無法使用'x:Name =「xyz」'在ResourceDictionary中定義樣式。只有x:密鑰有效。 – itowlson 2010-01-29 20:10:08

+0

不開玩笑!我怎麼錯過了?現在我該怎麼辦?刪除我的答案?修改它?我想我會修改它。謝謝itowlson。 – 2010-01-31 01:23:04

+0

感謝您的回覆。 請讓我知道如果我應該刪除這個問題,或編輯它的文本,使其不棘手。 – bybor 2010-02-01 10:14:29

2

x:名稱允許您創建可以按名稱使用的引用。

X:類型,您可以創建一個使用該類型

例如

<Style TargetType="{x:Type Button}"> 
    ... 
</Style> 

參考創建了一個風格,它會自動影響按鈕

相關問題