如果在窗體XAML代碼中定義了下面的內(nèi)容: <Button Name="mybutton"></Button> 則可以在窗體CS代碼中通過FindName方法查找到此按鈕對象,如果此按鈕在窗體的多個容器的更深層次,也可以通過此方法找到按鈕對象,F(xiàn)indName方法的使用如下: Button btn = FindName("mybutton") as Button; MessageBox.Show(btn.Name); 如果在窗體的CS代碼中動態(tài)添加按鈕并為按鈕設(shè)置Name屬性,此時在窗體中通過FindName方法是不可以找到此按鈕對象的,代碼如下: Button btns = FindName("btns") as Button; MessageBox.Show(btns.Name); 執(zhí)行的結(jié)果為btns對象一直為空,也就是使用FindName方法沒有找到動態(tài)添加的Button按鈕。 下面引用來自MSDN的一段話: 若要在初始的加載和處理之后向元素樹添加任何元素,都必須對定義名稱范圍的類調(diào)用相應(yīng)的 RegisterName 的實現(xiàn)。否則,無法通過 FindName 等方法按名稱引用添加的對象。僅設(shè)置 Name 屬性(或x:Name 屬性)不會將該名稱注冊到任何名稱范圍中。將命名的元素添加到具有名稱范圍的元素樹中也不會將此名稱注冊到名稱范圍中。盡管名稱范圍可以嵌套,但通常您應(yīng)該將名稱注冊到根元素上存在的名稱范圍中,這樣您的名稱范圍位置便可與在等效的加載 XAML 頁中可能已創(chuàng)建的名稱范圍并列。 應(yīng)用程序開發(fā)人員最常用的方案是使用 RegisterName 將名稱注冊到當前根元素的名稱范圍中。RegisterName 是查找將作為動畫運行的演示圖板的一種重要方案的一部分。 現(xiàn)在我們已經(jīng)知道了,要實現(xiàn)在窗體中通過FindName方法查找按鈕對象,首先要使用RegisterName方法為按鈕注冊名稱,在注冊名稱后即可以使用FindName方法查找到指定的按鈕對象,示例代碼如下: this.RegisterName("btns", btn); Button btns = FindName("btns") as Button; MessageBox.Show(btns.Name); |
|
來自: 風中Robin > 《WebBrowser》