x:Name 唯一地標識 XAML 定義的對象,以便於從代碼隱藏或通用代碼中訪問對象圖中實例化的對象。x:Name 一旦應用於支持編程模型,便可被視為與由構造函數返回的用於保存對象引用或實例的變量等效。
x:Name 用來在XAML中表示一個指定對象的名稱;可以通過他來訪問XAML對應隱藏代碼所關聯的對象。
Name 許多框架的類中都有Name這個屬性,而在WPF中,x:Name和Name是可以互換的。
所以現階段他們兩者做的是同樣的工作。
結果:
1. xmal中,永遠只有一個, 它就是x:Name;
2. 我們在xaml中有時能使用的Name,其實是被映射到x:Name上的。
原因:
1. 所有的Type在xaml中都能使用x:Name,即使這個type 沒有定義一個叫着Name的Property。因為xmal會在后台為其分配一個field來存儲,以便在Binding等里面使用。
2. 像FrameworkElement, VisualStateGroup的某些type,我們在xaml中可以使用Name來代替x:Name,因為它們定義了Name Property,但是最關鍵的是在type上聲明了一個Attribute,[RuntimeNameProperty("Name")],正是這個attribute把Name映射到了x:Name上,所以讓Name可以做到x:Name的功能。
擴展:
如果我們的某些type需要定義一個 Property,並且想做到x:Name的能力,別忘了加上RuntimeNamePropertyAttribute!
這個只是一個代碼編寫風格和習慣的問題,而不是一個技術問題。