使用Tile视图时在C#ListView中显示子项

时间:2011-04-29 15:33:22

标签: c# listview

我正在使用ListView组件在我的程序中显示一些已保存的配置文件,每个配置文件都有一个图标和一个标题。所以我使用了ListView,其中 View 属性设置为 Tile (也应用了灌浆)

我怎么不添加一些关于条目的描述文本(不是工具提示)。我可以像Windows资源管理器那样做吗?

Windows Explorer Tile view, item details

2 个答案:

答案 0 :(得分:5)

您可能需要定义列标题。来自documentation

  

平铺视图显示每个项目   左侧的大图标和文字   有关权利的信息。文字   信息由项目标签组成   接下来是子项目。默认情况下,仅限   显示第一个子项目   对应于项目标签。至   显示其他子项,您必须   将ColumnHeader个对象添加到   Columns集合。每个子项目   图块对应于列   头。控制哪些子项   显示和他们的顺序   显示,你必须设置   ListViewItem.ListViewSubItem.Name   每个项目的财产和   每个ColumnHeader.Name属性   头。然后,您可以添加,删除和   重新排列Columns中的标题   收集达到理想   结果

答案 1 :(得分:0)

我不确定这是否会完全符合您的要求,因为我只是在没有任何图标的情况下对其进行了测试,但是当ListView处于平铺模式时它将编写子项。

首先将ListView上的OwnerDraw设置为true,然后将此函数添加到其DrawItem事件中:

private void statisticsView_DrawItem(object sender,
    DrawListViewItemEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.White, e.Bounds);
    if((e.State & ListViewItemStates.Selected) != 0)
        e.DrawFocusRectangle();

    Rectangle bounds = e.Bounds;
    Font font = ((ListView)sender).Font;
    Font nameFont = new Font(font.FontFamily,
        font.Size,
        FontStyle.Underline | FontStyle.Bold,
        font.Unit,
        font.GdiCharSet,
        font.GdiVerticalFont);

    using(StringFormat sf = new StringFormat())
    {
        e.Graphics.DrawString(e.Item.SubItems[0].Text,
            nameFont, Brushes.Black, bounds, sf);
        bounds.Y += 17;
        for(int i = 1; i < e.Item.SubItems.Count; ++i, bounds.Y += 15)
            e.Graphics.DrawString(e.Item.SubItems[i].Text,
                font, Brushes.Black, bounds, sf);
    }
}

首先,它使用白色背景颜色填充图块,如果选择了图块,则会在其周围绘制一个选择矩形。下一部分只是采用ListView上的字体集并创建一个带有一些更改的重复字体。最后,它绘制每个子项目,同时在每个子项目后将绘图矩形向下移动15个像素。第一个子项用单独的字体绘制,比其余部分高17个像素。

您应该能够修改代码以满足您的需求。