我有一个WPF用户控件,其中包含许多文本框和按钮。目前,只要创建控件的实例,这些文本框和按钮都会通过后面的代码动态创建并加载到ItemsControl中。唯一的硬编码XAML是ItemsControl的声明。
有时这可能有点迟钝。如果我摆脱ItemsControl并将文本框和按钮硬编码到usercontrol的XAML中会更快吗?
答案 0 :(得分:6)
通常最好遵循您正在处理的平台的最佳实践;在代码隐藏中“手动”生成项目肯定不是WPF中的其中之一。研究使用DataTemplates并为框架留下艰苦的工作。这不是硬编码 - 你仍然会提供项目(如果你必须在代码后面,但最好通过绑定),ItemsControl将使用适当的DataTemplates“装扮”提供给其ItemsSource的项目。这通常会更快,即使只是因为虚拟化是自动处理的(取决于您正在使用的实际控件,但大多数ItemsControl都这样做。)
答案 1 :(得分:1)
两个选项:使用代码生成对象图,或使用XAML。
生成代码:
1)编译器将您的代码转换为IL
2)您的IL在运行时由CLR解释
3)您的对象图是在代码执行时创建的
生成XAML(基本上是构成UserControl的代码和XAML的混合):
1)编译器将代码部分转换为IL,将XAML转换为BAML
2)你的IL在运行时解释了
3)您的课程在运行时为constructed from the BAML文件
4)Unicorns和魔术合并两个
第二个版本在运行时实际上有点慢(或者我听说过)。当然,这是对流程的一个很大的简化,但你可以看到第二个版本涉及更多,并且有更多的独角兽内容。但事实是,从UI的角度来看,它们几乎是等价的。
我认为你的懦弱可能是由别的东西引起的。也许您实际上看到JIT从第一次执行开始滞后,或者代码中的其他因素可能导致该过程花费更长时间。
无论我建议您使用WPF方式创建WPF表单。使用绑定,如果需要动态创建UI,请查看ItemsControls和DataTemplates。它比你想象的容易得多。
答案 2 :(得分:0)
当然没有很大的速度差异,但对于开发,调试等代码背后的好一点。
尝试Xaml Generator,亲眼看看。