如何将图像置于ObjectListView列的中心?

时间:2012-01-31 02:47:00

标签: .net winforms objectlistview

我在C#winforms项目中使用ObjectListView,并希望在其中一列中显示一个小图标。

到目前为止,图标显示正常,但它不在列的中心,我找不到任何与列中图像对齐有关的文档或代码。

Here are the instructions for displaying an image as the column contents

代码几乎与给出的示例相同:

col_Important.AspectGetter = delegate(object x) { return ((ClassMyItem)x).IsImportant; };
col_Important.AspectToStringConverter = delegate(object x) { return String.Empty; };
col_Important.ImageGetter = delegate(object x)
    {
        return ((ClassMyItem)x).IsImportant? "star" : "none";
    };

有没有人处理过这个问题并且知道如何使图像居中?

2 个答案:

答案 0 :(得分:5)

在手动绘制子项目的过程中(使用DrawSubItem事件),我无意中发现只需将ObjectListView属性OwnerDraw设置为true实际上使图像居中。

为了清楚起见,这里是如何绘制仅包含图像的列:

colName.AspectGetter = delegate(object x) { return ((MyClass)x).SomeProperty; };
colName.AspectToStringConverter = delegate(object x) { return String.Empty }; };
colName.ImageGetter =
    delegate(object x) { return ((MyClass)x).SomeProperty ? "icon" : "none"; };

ObjectListView的SmallImageList设置为使用我为其创建的ImageList,ImageGetter方法使用图像名称(本例中为“icon”)。

默认情况下,无论文本对齐等设置如何,图像都会在列的最左侧绘制。

通过将ObjectListView的OwnerDraw设置为true,图像奇迹般地在列中居中,无需任何其他代码添加。这是意外的行为,可能值得进一步调查。现在它可以工作,所以也许这个技巧也可以帮助其他人。

答案 1 :(得分:0)

如何制作列表所有者并在绘制图像时使图像居中(计算x知道列边界)。现在正在寻找一个例子..

此处:Center subitem Icon in ListView

希望它有所帮助。