基本上,您需要为自己创建一个自定义Panel...现在不要沮丧...这并不那么困难。首先,请查看我提供链接的帖子,这些帖子解释了如何创建自定义 Panel:
How to create a Custom Layout Panel in WPF
Creating Custom Panels In WPF
好的,既然您对创建自定义 Panels 有了更多了解,我们可以继续...这是您需要的:
private int columnCount;
private double leftColumnEdge, rightColumnEdge, columnWidth;
public int ColumnCount
{
get { return columnCount; }
set
{
if (value < 1) value = 1;
columnCount = value;
}
}
此属性将用于您在Resources 中声明您的Panel:
<ItemsPanelTemplate x:Key="AnimatedPanel">
<Controls:AnimatedColumnWrapPanel ColumnCount="3" ... />
</ItemsPanelTemplate>
请注意,您需要将其声明为在 ItemsPanelTemplate 对象中,因为这是ItemsPanel 属性所期望的:
<ListBox ItemsPanel="{StaticResource AnimatedPanel}" ... />
现在回到 Panel... 这是我从 MeasureOverride 和 ArrangeOverride 方法调用的辅助方法:
private void UpdateColumns(int currentColumn, Size finalSize)
{
leftColumnEdge = (finalSize.Width / ColumnCount) * currentColumn;
rightColumnEdge = (finalSize.Width / ColumnCount) * (currentColumn + 1);
columnWidth = rightColumnEdge - leftColumnEdge;
}
很遗憾,我无法为您提供完整的示例,因为我的自定义 Panels 都绑定到具有许多附加功能的基本 AnimatedPanel 类中。但是,您只需要创建MeasureOverride 和ArrangeOverride 方法即可完成此Panel。如果你只是从逻辑上思考,真的没那么难。