WPF,控件是在什么时候初始化的?
有一段代码,寻找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文档,为什么找不到模板中的元素呢?
------解决方案--------------------在InitializeComponent();
之后写个eventhandler
this.Loaded+=自己点下就出来了
意思是加载完成后执行 也就是初始化控件完成后会触发这个事件
------解决方案--------------------当 XAML 放入一个 Window 对象时,无法看到它的可视树,但只要将该 Window 元素改为 Page 元素(并删除 SizeToContent 属性)就可以看到了
http://blog.csdn.net/daming_ocean/article/details/6093221
希望对你有帮助
------解决方案--------------------
把你的代码放在窗体Load事件中试试,如果还是找不到,在查找控件之前调用控件的UpdateLayout方法先,如下代码所示:
this.button1.UpdateLayout()
Border border = button1.Template.FindName("border", button1) as Border;
------解决方案--------------------