【问题标题】:Considering HorizontalAlignment and VerticalAlignment while creating a custom panel在创建自定义面板时考虑 HorizontalAlignment 和 VerticalAlignment
【发布时间】:2011-06-10 06:52:28
【问题描述】:
我正在尝试在 wpf 中创建自定义面板。这是我的疑问,
- 我如何考虑
水平对齐和
VerticalAlignment 因素同时
将项目放在我的面板中。
我应该在我的
ArrangeOverride 方法??
- 考虑
我想写一个 WrapPanel
克隆。如果面板的宽度设置为
“自动”,我如何获得实际宽度
安排我的孩子
项目。我总是得到
ActualWidth/ActualHeight 为 0。我是
错过了什么???
请帮忙。
【问题讨论】:
标签:
wpf
xaml
alignment
panel
【解决方案1】:
- 你不需要考虑
水平对齐和
垂直对齐。这些属性
由内部使用
FrameworkElement 并生效
自动。
- 的单个参数
ArrangeOverride 会给你一个尺寸,
哪个父母允许您的面板。
您必须在此范围内安排孩子
区域。如果您的意思是“Auto”是放置所有面板子项的大小,则必须从 MeasureOverride 计算并返回它。
别忘了使用 InternalChildren 而不是 Children。
【解决方案2】:
要实现自己的面板,您需要实现MeasureOverride 和ArrangeOverride。在布局期间,事情正在计算中,因此最终值尚不可用。首先,使用MeasureOverride 中传递给您的Size 参数,这是可用的大小。您最终可能会使用更多或更少的数量。这取决于面板的布局行为。无论您做什么,您都必须为您所有的孩子拨打Measure,您当然可以在计算中使用该信息。
如果你有一些特定的面板行为你想实现但又不想处理大量的特殊情况,那么你可以给你的孩子他们要求的所有空间在你不堆叠的方向上,让你的孩子如有必要,使用子面板进行布局。
【解决方案3】:
您是否对水平和/或垂直对齐采取行动取决于您。如果垂直 StackPanel 会考虑孩子的 VerticalAlignment,那就不好了。
您应该在每个子控件上调用 Measure() 方法。这将为您提供所需的大小。