有一段代码,寻找XAML中的元素,此元素存在于模板中。如下:public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Border border = button1.Template.FindName("border", button1) as Border;
        MessageBox.Show((border == null).ToString());
    }
   private void button1_Click(object sender, RoutedEventArgs e)
    {
        Border border = button1.Template.FindName("border", button1) as Border;
        MessageBox.Show((border == null).ToString());
    }
}
在窗体的构造函数中寻找button1控件模板中的Border元素,结果没有找到,请问,这个时候为什么找不到呢?但是在button1的单击事件中却找到了。
在执行InitializeComponent方法之前,应用程序就执行了Application.LoadComponent(this, resourceLocater)静态方法,其中参数resourceLocater是XAML文档的Uri。
也就是说在窗体执行InitializeComponent()方法之前就加载了XAML文档,为什么找不到模板中的元素呢?

解决方案 »

  1.   

    在InitializeComponent();
    之后写个eventhandler
    this.Loaded+=自己点下就出来了
    意思是加载完成后执行 也就是初始化控件完成后会触发这个事件
      

  2.   

    窗体及窗体的控件,什么时候加载完毕,应该是固定的吧,是不是应该是在执行InitializeComponent方法之前加载完毕呢?
      

  3.   

    当 XAML 放入一个 Window 对象时,无法看到它的可视树,但只要将该 Window 元素改为 Page 元素(并删除 SizeToContent 属性)就可以看到了
    http://blog.csdn.net/daming_ocean/article/details/6093221希望对你有帮助
      

  4.   

    把你的代码放在窗体Load事件中试试,如果还是找不到,在查找控件之前调用控件的UpdateLayout方法先,如下代码所示:this.button1.UpdateLayout()
     Border border = button1.Template.FindName("border", button1) as Border;
      

  5.   


    Window.ContentRendered之后。把你的代码放到window.ContentRendered事件中就可以找到任何控件了。
      

  6.   

    窗体及窗体的控件,什么时候加载完毕,应该是固定的吧,是不是应该是在执行InitializeComponent方法之前加载完毕呢?看看这个 不知道对你有帮助么 其实你的问题也没有描述太清楚 不知道你想要干什么
    http://msdn.microsoft.com/zh-cn/library/system.windows.frameworkelement.loaded.aspx