读书人

WPF控件是在什么时候初始化的?该如

发布时间: 2013-09-12 22:07:00 作者: rapoo

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

希望对你有帮助
[解决办法]
引用:
在InitializeComponent();
之后写个eventhandler
this.Loaded+=自己点下就出来了
意思是加载完成后执行 也就是初始化控件完成后会触发这个事件

把你的代码放在窗体Load事件中试试,如果还是找不到,在查找控件之前调用控件的UpdateLayout方法先,如下代码所示:

this.button1.UpdateLayout()
Border border = button1.Template.FindName("border", button1) as Border;

[解决办法]
引用:
控件什么时候初始化,这个没有个定数的吗?



Window.ContentRendered之后。把你的代码放到window.ContentRendered事件中就可以找到任何控件了。
[解决办法]
看code behind。
[解决办法]
引用:
Quote: 引用:

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

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


看看这个 不知道对你有帮助么 其实你的问题也没有描述太清楚 不知道你想要干什么
http://msdn.microsoft.com/zh-cn/library/system.windows.frameworkelement.loaded.aspx

读书人网 >C#

热点推荐