指定最大列数 WrapPanel 在 WPF

我有 WrapPanel, 我想指定其列的最大数量。 所以,例如,当我的收藏 "ObjectCollection" /绑定了这一点 WrapPanel/ 只包含 4 元素,T. WrapPanel 只有一行。 但当 "ObjectCollection" 将有 5 元素,T. wrapPanel 创建另一个字符串来放置第五个字符串。 /我的 Max_Columns_Number 在这种情况下是相等的 4/.
已邀请:

龙天

赞同来自:

我几乎肯定 , 你不能这样做
http://msdn.microsoft.com/en-u ... .aspx
, 但是你可以使用
http://msdn.microsoft.com/en-u ... .aspx
.

它具有指定所需行数和列的属性。

如果您指定该属性
Columns

价值 4, 它将保留 4 每行中的元素,然后将它们传送到下一个。


<uniformgrid columns="4">
<!-- In first row -->
<button content="test"></button>
<button content="test"></button>
<button content="test"></button>
<button content="test"></button>
<!-- In second row -->
<button content="test"></button>
</uniformgrid>

喜特乐

赞同来自:

原则上,您需要创建自定义
Panel

为自己......现在你不会丢失......这不是

只是

难的。 首先,请查看我提供链接的消息,以解释如何创建自定义
Panel

:

http://wpftutorial.net/CustomLayoutPanel.html
http://www.codeproject.com/Art ... n-WPF
所以,现在,当你了解更多关于创建自定义时
Panel

s, 我们可以继续......这就是你需要的:


private int columnCount;
private double leftColumnEdge, rightColumnEdge, columnWidth;

public int ColumnCount
{
get { return columnCount; }
set
{
if /value < 1/ value = 1;
columnCount = value;
}
}


此属性将在您宣布您的位置使用
Panel


Resources

:


<itemspaneltemplate x:key="AnimatedPanel">
<controls:animatedcolumnwrappanel ...="" columncount="3"></controls:animatedcolumnwrappanel>
</itemspaneltemplate>


请注意,您需要声明它。

里面

目的
ItemsPanelTemplate

, 因为这是房产等待的
ItemsPanel

:


<listbox ...="" itemspanel="{StaticResource AnimatedPanel}"></listbox>


现在回到k。
Panel

... 以下是我从方法引起的辅助方法
MeasureOverride


ArrangeOverride

:


private void UpdateColumns/int currentColumn, Size finalSize/
{
leftColumnEdge = /finalSize.Width / ColumnCount/ * currentColumn;
rightColumnEdge = /finalSize.Width / ColumnCount/ * /currentColumn + 1/;
columnWidth = rightColumnEdge - leftColumnEdge;
}


不幸的是,我不能为您提供一个完整的例子,因为我的所有自定义
Panel

与基本课程联系在一起
AnimatedPanel

具有大量可选功能。 但是,您只需要创建方法。
MeasureOverride


ArrangeOverride

, 完成这一点
Panel

. 如果你只是逻辑地思考它,它

真的

不太困难。

八刀丁二

赞同来自:

您可以通过设置包装面板宽度来控制列数。 我将包装面板宽度绑定到 ActualWidth 容器类似于边界。 因此,列的数量是动态的,取决于窗口的宽度。


<border borderbrush="Navy" borderthickness="1,2,2,2" grid.column="1" grid.row="0" name="DataBorder" padding="4">
<grid>
<grid.rowdefinitions>
<rowdefinition height="Auto"></rowdefinition>
<rowdefinition height="*"></rowdefinition>
</grid.rowdefinitions>
<stackpanel>
<textblock text="{Binding NewPictureCountDisplay}"></textblock>
</stackpanel>
<listbox grid.row="1" itemssource="{Binding CreatedFiles}" name="NewFilesListBox">
<listbox.itemspanel>
<itemspaneltemplate>
<wrappanel orientation="Horizontal" width="{Binding ElementName=DataBorder, Path=ActualWidth}"></wrappanel>
</itemspaneltemplate>
</listbox.itemspanel>
<listbox.itemtemplate>
<datatemplate>
<grid>
<grid.rowdefinitions>
<rowdefinition height="*"></rowdefinition>
<rowdefinition height="Auto"></rowdefinition>
</grid.rowdefinitions>
<image grid.row="0" height="128" source="{Binding FullPath}" stretch="UniformToFill" width="128"/>
<stackpanel grid.row="1" orientation="Vertical">
<button content="Import" margin="2"></button>
<button content="Delete" margin="2"></button>
<textblock horizontalalignment="Stretch" margin="2" text="{Binding FullPath}"></textblock>
<textblock horizontalalignment="Stretch" margin="2" text="{Binding ChangeType}"></textblock>
</stackpanel>
</grid>
</datatemplate>
</listbox.itemtemplate>
</listbox>


</grid></border>

郭文康

赞同来自:

有时

UniformGrid

不够:

当物品有差异非常不同,或

如果您垂直需要物品,您不想使用
https://social.msdn.microsoft. ... 3Dwpf
小路



能够被找到的

WrapPanel

与你在寻找什么。

Xaml

:


<loc:wrappanelwithrowsorcolumnscount orientation="Vertical" rowsorcolumnscount="2" xmlns:loc="clr-namespace:...">
<textbox height="30" margin="2" text="Andrew"></textbox>
<textbox height="40" margin="2" text="Betty"></textbox>
<textbox height="20" margin="2" text="Celine"></textbox>
<textbox height="20" margin="2" text="Dick"></textbox>
<textbox height="30" margin="2" text="Enron"></textbox>
<textbox height="20" margin="2" text="Felix"></textbox>
<textbox height="30" margin="2" text="Hanibal"></textbox>
</loc:wrappanelwithrowsorcolumnscount>


结果

:

https://i.stack.imgur.com/nJvM1.png

要回复问题请先登录注册