如果在窗体XAML代码中定义了下面的内容: <Button Name="mybutton"></Button> 则可以在窗体CS代码中通过FindName方法查找到此按钮对象,如果此按钮在窗体的多个容器的更深层次,也可以通过此方法找到按钮对象,FindName方法的使用如下: Button btn = FindName("mybutton") as Button; MessageBox.Show(btn.Name); 如果在窗体的CS代码中动态添加按钮并为按钮设置Name属性,此时在窗体中通过FindName方法是不可以找到此按钮对象的,代码如下: Button btns = FindName("btns") as Button; MessageBox.Show(btns.Name); 执行的结果为btns对象一直为空,也就是使用FindName方法没有找到动态添加的Button按钮。 下面引用来自MSDN的一段话: 若要在初始的加载和处理之后向元素树添加任何元素,都必须对定义名称范围的类调用相应的 RegisterName 的实现。否则,无法通过 FindName 等方法按名称引用添加的对象。仅设置 Name 属性(或x:Name 属性)不会将该名称注册到任何名称范围中。将命名的元素添加到具有名称范围的元素树中也不会将此名称注册到名称范围中。尽管名称范围可以嵌套,但通常您应该将名称注册到根元素上存在的名称范围中,这样您的名称范围位置便可与在等效的加载 XAML 页中可能已创建的名称范围并列。 应用程序开发人员最常用的方案是使用 RegisterName 将名称注册到当前根元素的名称范围中。RegisterName 是查找将作为动画运行的演示图板的一种重要方案的一部分。 现在我们已经知道了,要实现在窗体中通过FindName方法查找按钮对象,首先要使用RegisterName方法为按钮注册名称,在注册名称后即可以使用FindName方法查找到指定的按钮对象,示例代码如下: this.RegisterName("btns", btn); Button btns = FindName("btns") as Button; MessageBox.Show(btns.Name); |
|
来自: 风中Robin > 《WebBrowser》