我在C#中有一个Windows应用程序,我想根据他们的分数将人排名为3个级别;一级最高分,三级最高分,第三级最高分。Windows应用程序:对齐ListView项中的一组到行的中心
我已经实现了这一点,如图所示,成功地使用3个组的ListView;我的问题是:我可以将每个组中的项目对齐到中心吗?项目对齐到左
我在C#中有一个Windows应用程序,我想根据他们的分数将人排名为3个级别;一级最高分,三级最高分,第三级最高分。Windows应用程序:对齐ListView项中的一组到行的中心
我已经实现了这一点,如图所示,成功地使用3个组的ListView;我的问题是:我可以将每个组中的项目对齐到中心吗?项目对齐到左
不,这不是真的有可能不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
在组内你需要将它们全部删除到列表中,并按照新的顺序重新添加它们。