在 Windows 表单中动态生成 windows 10ish tile-menu
dynamically generate a windows 10ish tile-menue in Windows Forms
有没有人知道生成图块的好方法,动态按组排序?
类似于 windows 10 中的磁贴视图(或者在本例中为 devexpress 示例)
目标是通过如下方式以编程方式添加组或图块:list.add("groupname","tilename")。所以组名将是组的主键和磁贴的外键。
如果您不能使用 DevExpress 控件并且不想创建自己的自定义绘制控件(我会推荐),您可以尝试使用堆叠的 FlowLayoutPanels:
将顶级 FlowLayoutPanel 放在窗体上并将其 FlowDirection 设置为 LeftToRight(蓝色的)。
对于您想要的每个组,添加一个带有 FlowDirection.TopDown(绿色的)的子 FlowLayoutPanel。
所以绿色的是你的组,你想要的图块是每个组内的控件(红色方块)。
请注意,这只是使用默认 WinForms 机制实现该行为的想法。我认为这不会很好地扩展使用的许多控件。
这是我创建的一个简单示例,可帮助您开始使用模型部分。
假设您有一个 Tile class 代表您的瓷砖。在那种情况下,我直接将组名称作为磁贴的一部分,但您也可以使用 Group
class 并将 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
参数对图块进行分组:
var groupedTiles =
from t in tiles
group t by t.Group into g
select new { Group = g.Key, Tiles = g.ToList() };
groupTiles
将包含 "groups" 的列表,每个列表都包含附加的图块列表。您应该能够轻松地将其绑定到您的视图。
这是一个控制台输出:
foreach (var group in groupedTiles)
{
Console.Out.WriteLine(group.Group);
foreach (var tile in group.Tiles)
{
Console.Out.WriteLine("\t" + tile.Title);
}
}
希望这对您有所帮助。
有没有人知道生成图块的好方法,动态按组排序?
类似于 windows 10 中的磁贴视图(或者在本例中为 devexpress 示例)
目标是通过如下方式以编程方式添加组或图块:list.add("groupname","tilename")。所以组名将是组的主键和磁贴的外键。
如果您不能使用 DevExpress 控件并且不想创建自己的自定义绘制控件(我会推荐),您可以尝试使用堆叠的 FlowLayoutPanels:
将顶级 FlowLayoutPanel 放在窗体上并将其 FlowDirection 设置为 LeftToRight(蓝色的)。
对于您想要的每个组,添加一个带有 FlowDirection.TopDown(绿色的)的子 FlowLayoutPanel。
所以绿色的是你的组,你想要的图块是每个组内的控件(红色方块)。
请注意,这只是使用默认 WinForms 机制实现该行为的想法。我认为这不会很好地扩展使用的许多控件。
这是我创建的一个简单示例,可帮助您开始使用模型部分。
假设您有一个 Tile class 代表您的瓷砖。在那种情况下,我直接将组名称作为磁贴的一部分,但您也可以使用 Group
class 并将 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
参数对图块进行分组:
var groupedTiles =
from t in tiles
group t by t.Group into g
select new { Group = g.Key, Tiles = g.ToList() };
groupTiles
将包含 "groups" 的列表,每个列表都包含附加的图块列表。您应该能够轻松地将其绑定到您的视图。
这是一个控制台输出:
foreach (var group in groupedTiles)
{
Console.Out.WriteLine(group.Group);
foreach (var tile in group.Tiles)
{
Console.Out.WriteLine("\t" + tile.Title);
}
}
希望这对您有所帮助。