创建自定义面板时考虑Horizo​​ntalAlignment和VerticalAlignment

时间:2011-01-17 06:47:09

标签: wpf xaml alignment panel

我正在尝试在wpf中创建自定义面板。这就是我的疑虑,

  • 我如何考虑 Horizo​​ntalAlignment和 VerticalAlignment因素而 将项目放在我的面板中。 我应该检查一下这些标志吗? ArrangeOverride方法??
  • 考虑 我想写一个WrapPanel 克隆。如果面板的宽​​度设置为 “自动”,我如何获得实际宽度 小组安排我的孩子 项目。我总是得到 ActualWidth / ActualHeight为0.我 错过了什么???

请帮忙。

3 个答案:

答案 0 :(得分:2)

您是否采取横向和/或垂直对齐方式取决于您自己。如果垂直StackPanel会考虑孩子的VerticalAlignment,那就不好了。

您应该在每个Child控件上调用Measure()方法。这将为您提供所需的尺寸。

答案 1 :(得分:1)

要实施您自己的面板,您需要实施MeasureOverrideArrangeOverride。在布局期间,事情正在计算中,因此最终值尚不可用。要开始使用,请使用Size中传递给您的MeasureOverride参数,该参数是可用大小。您最终可能会使用多于或少于此金额。这取决于面板的布局行为。无论你做什么,你都必须给所有孩子打电话Measure,你当然可以在计算中使用这些信息。

如果您想要实施某些特定的面板行为,但又不想处理大量特殊情况,那么您可以向您的孩子提供他们请求的所有空间,以便您不会堆叠并让您的孩子如有必要,可以使用子面板。

答案 2 :(得分:0)

  • 你不需要考虑 Horizo​​ntalAlignment和 垂直对齐。这些属性 在内部使用 FrameworkElement并生效 自动。
  • 单一论点 ArrangeOverride会给你一个大小, 哪位家长允许您的小组。 你必须安排孩子 区域。如果您的意思是“自动”是放置所有面板子项的大小,则必须计算并从MeasureOverride返回它。

不要忘记使用InternalChildren而不是Children。