2010-12-13 38 views
45

WPF中的x:Keyx:Name有什麼區別?x:Key和x:WPF中的名稱有什麼區別?

我不確定真正的區別是什麼。

+1

@Alastair,您列出的可能與此無關的問題與此無關。 – Josh 2010-12-13 03:39:51

+1

它是如何重複的?另一個問題是關於'Name'與'Type'的關係。這個問題是關於'Key'與'Name'的關係。 – jalf 2010-12-13 03:40:28

+0

我的錯誤,我誤讀了「可能的欺騙」問題。道歉。 – 2010-12-13 03:51:20

回答

43

雖然它們用於類似的目的,但它們不可互換。 x:Key用於作爲值添加到字典中的項目,通常用於添加到ResourceDictionary中的樣式和其他資源。設置x:Key屬性時,實際上對象上沒有對應的屬性,甚至沒有設置附加的依賴項屬性。它只是被XAML處理器用來調用Dictionary.Add時知道什麼鍵。

x:名稱有點複雜。它用於在某個父元素的範圍內將關聯名稱應用於對象(通常是從FrameworkElement派生的對象)。此範圍稱爲「名稱範圍」,想象它的最簡單方法是想象一個包含<TextBox x:Name="foo" />的用戶控件。

然後,您可以將UserControl的多個實例放到窗口中,而不會名爲「foo」,因爲每個UserControl都有自己的名稱範圍。

值得注意的是FrameworkElement定義了一個名爲Name的依賴項屬性,它相當於設置x:Name。

另一個區別是,XAML設計器在具有x:Name的元素的代碼隱藏中創建成員。使用x:Key添加到字典中的對象不是這樣。

有關這些的更多信息,請參閱the x:Name directive的MSDN文檔的備註部分。

20

x:鍵只在ResourceDictionary元素的範圍內有效。 x:Key用作ResourceDictionary中元素的主標識符。

另一方面,x:Name在除ResourceDictionary以外的所有其他範圍內都有效。 x:Key在ResourceDictionary範圍外無效。