我在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";
};
有没有人处理过这个问题并且知道如何使图像居中?
答案 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知道列边界)。现在正在寻找一个例子..
希望它有所帮助。