我在C#中有一个Windows应用程序,我想根据他们的分数对人们进行排名,分为3个级别;第一级得分最高,第二级得分最高,第三级得分最高。
我已经实现了这一点,如图所示,使用ListView成功完成了3组;我的问题是:我可以将每组中的项目对齐到中心吗?项目与左侧对齐
答案 0 :(得分:2)
如果没有owner-drawing
ListView
,那么这是不可能的。
原因是ShowGroups
属性。
如果错误,您可以为每个Position
计算ListViewItem
..
以下是修改ListViewItem
:
ListViewItem lvi = listView1.Items[3];
lvi.Position = new Point(lvi.Position.X + 50, lvi.Position.Y);
lvi.Text = "X testing X";
但如果ListView
遗憾地ShowGroups = true
,则无效。计算偏移量也不是一项简单的任务;毕竟它会有所不同,具体取决于组和行中Items
两者的数量。
所以你必须拥有ListView
所有权,这将有效,但在确定确切位置时会遇到同样的问题。
以两个项目为中心会使整个布局看起来像锯齿状和丑陋,imo。
也许最简单的解决方案是解决方法:只需在需要的地方添加虚拟物品。它的图像是透明的或其ImageIndex = -1;
及其文本为空或空白。您可以将它插入每个具有奇数数量的项目的组中,这些项目不能被行中的最大项目整除。在你的情况下3.或者也许足以检查该组是否只包含一个项目..
以下是一个例子:
void InsertBlankItem(ListView lv, ListViewGroup lvg)
{
ListViewItem lvOld = g.Items[0];
lvg.Items.Remove(lvOld);
ListViewItem lviBlank = new ListViewItem() { Text = " ", ImageIndex = -1 };
lviBlank.Group = lvg;
listView1.Items.Add(lviBlank);
lvg.Items.Insert(1, lvOld);
}
这会添加一个空白项目并将第一个项目移动到结尾..:
private void button1_Click(object sender, EventArgs e)
{
foreach (ListViewGroup g in listView1.Groups)
{
if (g.Items.Count == 1) InsertBlankItem(listView1, g);
}
}
当然,现在您的ListView
..
如果您想在群组中重新订购更多Items
,则需要将它们全部删除到列表中,然后按新订单重新添加。