繁体   English   中英

在Windows窗体中动态生成Windows 10ish平铺菜单

[英]dynamically generate a windows 10ish tile-menue in Windows Forms

有谁知道一种生成图块(按组动态排序)的好方法吗?

类似于Windows 10中的图块视图(在本例中为devexpress示例) 赢得10个启发性的Tile-Menue

目的是通过编程方式添加组或图块,例如:list.add(“ groupname”,“ tilename”)。 因此,组名将是组的主键和tile的外键。

如果您无法使用DevExpress控件,并且不想创建自己的自定义绘制控件(那么我会建议这样做),则可以尝试使用堆叠的FlowLayoutPanels:

将顶级FlowLayoutPanel放在窗体上,并将其FlowDirection设置为LeftToRight(蓝色)。

对于每个想要的组,添加带有FlowDirection.TopDown的子FlowLayoutPanel(绿色的)。

在此处输入图片说明

因此,绿色的是您的组,您要拥有的图块是每个组内的控件(红色方块)。

请注意,这只是使用默认WinForms机制实现该行为的一种想法。 我认为这在使用许多控件时无法很好地扩展。

这是我创建的一个简单示例,可帮助您开始使用模型零件。

假设您有一个Tile类别代表您的Tile。 在这种情况下,我将组名直接放在GroupId贴中,但是您也可以有一个Group类,并将GroupId存储在GroupId贴中。

public class Tile
{
    public string Title { get; set; }
    public string Group { get; set; }
}

现在,假设您已经创建了一些像这样的图块:

 var tiles = new Tile[] {
     new Tile { Title = "Tile 1", Group = "Group 1" },
     new Tile { Title = "Tile 2", Group = "Group 1" },
     new Tile { Title = "Tile 3", Group = "Group 1" },
     new Tile { Title = "Tile 4", Group = "Group 2" },
     new Tile { Title = "Tile 5", Group = "Group 2" },
     new Tile { Title = "Tile 6", Group = "Group 2" }};

现在,您可以使用简单的Linq查询按Group参数对图块进行Group

var groupedTiles = 
    from t in tiles
    group t by t.Group into g
    select new { Group = g.Key, Tiles = g.ToList() };

groupTiles将包含一个“组”列表,其中将包含每个附加的图块列表。 您应该能够轻松地将其绑定到视图。

这是控制台输出:

foreach (var group in groupedTiles)
{
    Console.Out.WriteLine(group.Group);

    foreach (var tile in group.Tiles)
    {
        Console.Out.WriteLine("\t" + tile.Title);
    }
}

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM