在创建自定义面板时考虑水平对齐和垂直对齐

4

我正在尝试在WPF中创建一个自定义面板。以下是我有的疑问:

  • 当将项目放入面板中时,我应该如何考虑HorizontalAlignment和VerticalAlignment因素。我是否应该在我的ArrangeOverride方法中检查这些标志?
  • 假设我想编写一个WrapPanel克隆版。如果将面板的宽度设置为"Auto",那么我该如何获取面板的实际宽度来安排子元素。我总是得到ActualWidth/ActualHeight为0。我是不是漏掉了什么?

请帮帮我。

3个回答

3

是否采取水平和/或垂直对齐取决于您。如果一个垂直的StackPanel考虑了子元素的垂直对齐,那就很不好。

您应该在每个子控件上调用Measure()方法。这将给您所需的大小。


2
要实现自己的面板,您需要实现MeasureOverrideArrangeOverride。在布局期间,正在计算事情,因此最终值尚不可用。要开始,请使用在MeasureOverride中传递给您的Size参数,这是可用大小。您可能会使用更多或更少的量。这取决于面板的布局行为。无论您做什么,都必须在所有子项上调用Measure,当然您可以在计算中使用该信息。
如果您想要实现某些特定的面板行为,但不想处理大量特殊情况,则可以在您不堆叠的方向上为您的子项提供它们请求的所有空间,并让您的子项使用子面板进行布局。

0
  • 您不需要考虑HorizontalAlignment和VerticalAlignment。这些属性由FrameworkElement在内部使用,并自动生效。
  • ArrangeOverride的单个参数将为您提供一个大小,该大小是父级允许的面板大小。您必须在此区域内排列子元素。如果您的意思是“Auto”是放置所有面板子元素的大小,则必须从MeasureOverride中计算并返回它。

别忘了使用InternalChildren而不是Children。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接