WPF中 x:Name和Name的區別(bie)
x:Name 唯一地標識 XAML 定義的對(dui)(dui)(dui)象(xiang),以便于(yu)從代碼隱藏或通用代碼中(zhong)訪問對(dui)(dui)(dui)象(xiang)圖中(zhong)實例(li)化(hua)的對(dui)(dui)(dui)象(xiang)。x:Name 一旦應(ying)用于(yu)支持編(bian)程模型,便可被視為(wei)與由構造(zao)函數返回的用于(yu)保(bao)存對(dui)(dui)(dui)象(xiang)引用或實例(li)的變量等(deng)效。
x:Name 用來在XAML中表示一個指定對象的名稱;可以通過他來訪問XAML對應隱藏代碼所關聯的對象。
Name 許多框架的類中都有Name這個屬性,而在WPF中,x:Name和Name是可以互換的。
所以現階段他們(men)兩者做的是同樣的工作。
結果:
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!
這個只是一(yi)個代(dai)碼編寫風(feng)格和習慣的問題(ti),而不是一(yi)個技術問題(ti)。