我想知道...我有一个 WinForms System.Windows.Forms.ListView 和一堆我正在使用 View.List 样式绘制的 ListViewItems。每个 ListViewItem 都有一个“SmallIcon”,我从 ListView 的 SmallImageList 中获取。
我的问题是图标显示得太靠近左侧的边框。我试图更改边界和 ListViewItem 的 Position 属性无济于事。
无论如何对 ListViewItems 有某种偏移量吗?
我想知道...我有一个 WinForms System.Windows.Forms.ListView 和一堆我正在使用 View.List 样式绘制的 ListViewItems。每个 ListViewItem 都有一个“SmallIcon”,我从 ListView 的 SmallImageList 中获取。
我的问题是图标显示得太靠近左侧的边框。我试图更改边界和 ListViewItem 的 Position 属性无济于事。
无论如何对 ListViewItems 有某种偏移量吗?
Win32 listview 控件没有任何设置来增加图标和标签之间的空间(在任何视图中,不仅仅是列表)。设置在视图ListViewItem.Position
中时不执行任何操作。ListView
List
一个技术含量低的解决方案是简单地在每个 ListViewItem 的Text
值前面加上一个空格。有点难看,但是很容易做到。
如果你真的想拥有像素级控制,你将不得不拥有它。与往常一样,如果您使用 .NET ListView 进行任何操作,ObjectListView会使所有者绘制您的项目变得微不足道。
如前所述,在所有项目的文本前加上空格是添加填充的超级简单方法。然而,这有一个相当大的缺点。一旦执行此操作,您将失去在 ListView 中查找项目的能力,只需在 ListView 获得焦点时开始键入它们的名称即可。
尝试在小图像的左侧添加空白。
如果您使用 16x16 图像更改为 24x16,例如通过在左侧添加 8 个白色(或 ListView 背景颜色)像素。
如果您在 ListView View LargeIcons 中,则可以使用 item.position 发布文本
一个屏幕截图将是一个很好的例子,可以准确地看到你所追求的。
有趣的事情... Windows 资源管理器使用 ListView 来显示文件和文件夹。我通常在报告或详细信息模式下运行我的视图。我刚刚将其切换到列表视图模式,并查看您所描述的确切问题!哎呀。可能是 Win32 对象和特定视图类型的错误!
一个快速的解决方法可能是使用单列的 ListView 的报告样式,或者自己实现一些东西。.Net 中的 FlowLayoutPanel 可以很好地作为自定义列表视图的起点。
当您使用该View.List
样式时,我怀疑您需要实现一些自定义绘图或考虑填充您的图像。您还可以查看覆盖 ListView 控件并通过覆盖SetBoundsCore
或SetClientSizeCore
(或类似)操作它的边界。
但是,如果ListView
已设置为View.Details
查看,则可以使用以下ListViewItem.IndentCount
属性来完成:
仅当包含 ListView 的 View 属性设置为 Details,并且设置了 ListView 的 SmallImageList 属性时,才能使用 IndentCount 属性。资料来源:MSDN
如果设置 StateImageList 属性,则可以在图标前添加 16 px 的空间。我认为您可以通过将具有匹配宽度的图像作为第一个条目加载到 StateImageList 来调整这个额外的空间。但我没有测试过这个。
该线程 讨论了相反的问题。