2010-03-10 57 views
2

我正在WPF项目的UI端工作。我最喜欢的参考,而xaml'ing(除了stackoverflow :))此刻是亚当内森的“Windows演示基础释放”。他给出了关于控制模板的以下提示:“不要在控件模板中使用ContentControl,而应该使用更轻量级的ContentPresenter元素”。更轻的元素 - 如何测量/知道元素的重量?

我一起工作的开发人员通常也告诉我用最轻便的元素我所能在所有我做的xaml'ing - 这我完全理解。

我(!天真的)问题是:我如何找出什么不同元素的相对“权重”是谁?有很明显的事情,比如RichTextBox与TextBox。但是,我怎么知道在一个能够完成这个任务的情况下,StackPanel是否比Grid更好呢?

元素/控件的视觉树是“重量”的好指标吗?我还能看到什么?

在此先感谢。

回答

2

当谈到喜欢的东西ContentPresenter与ContentControl中,你可以检查继承层次:ContentPresenter自FrameworkElement派生,而ContentControl中从Control派生。

至于面板走,基本上电网拥有最复杂的布局逻辑(这就是为什么它是最灵活的),所以一般任何其他面板将是更好的,如果它可以完成这项工作。如果你想有一个具体的指导面板的复杂性,我将在下面的顺序列出从最低到最高复杂:

  1. UniformGrid - 子大小甚至没有用于计算面板的程度
  2. 的StackPanel - 孩子的大小只有一个维度是用来
  3. WrapPanel - 到StackPanel的相似,但作为一个列/行的最宽的元素稍微复杂一点必须记住。
  4. DockPanel中 - 因为只有一个元素可以占用所有剩余空间,我会说这是比格重量更轻。
  5. 电网 - 最灵活,因此具有最复杂的布局算法。
+0

嗨安倍 首先,谢谢。 从您的答案:“...您可以检查继承层次结构:ContentPresenter派生自FrameworkElement,而ContentControl派生自Control。” 因此,派生自Control的东西总是比来自FrameworkElement.Panel派生的东西“重一些”,因为控件的控件模板包含一系列的功能? 并且:“网格 - 最灵活,因此具有最复杂的布局算法。” 即灵活性通常也是重量的良好指示。 (我在这里大声思考,所以纠正我,如果我错了!) – cfouche 2010-03-11 07:06:43

+0

是的,我同意你的所有澄清。我会说Controls的模板化是真正让他们变得更重的原因。由于您可以将控件的可视化树重新定义为全局样式,因此作为对照作者,您不知道要添加多少个视觉效果...... – 2010-03-11 21:21:46