【问题标题】:How do I center the image in an ObjectListView column?如何在 ObjectListView 列中居中图像?
【发布时间】:2012-01-31 02:46:59
【问题描述】:

我在 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";
    };

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

【问题讨论】:

    标签: .net winforms objectlistview


    【解决方案1】:

    在手动绘制子项的过程中(使用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,图像奇迹般地在列中居中,无需添加任何其他代码。这是出乎意料的行为,可能值得更多调查。现在它有效,所以也许这个技巧也可以帮助其他人。

    【讨论】:

    • 我无法删除 edit 评论,因为 stackoverflow 一直坚持编辑至少 6 个字符。有人可以请删除块。
    • @Xan 你想做什么?
    • 我刚刚添加了两个分号并删除了一个大括号,但出现了一个错误,我必须编辑至少 6 个字符。所以我想我会添加一些废话并稍后删除,但是算法太聪明/太烦人了:-)
    • 只需进行相同的编辑,然后添加  到最后什么的。
    • 顺便说一句,新方法是AspectToStringConverter = value => String.Empty;
    【解决方案2】:

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

    这里:Center subitem Icon in ListView

    希望对你有帮助。

    【讨论】:

    • 我看到了链接的答案,并且肯定已经考虑过了。考虑到我需要在多个地方应用此修复程序,我希望可能有更简单的方法。
    • 您可以对 OLV 进行子类化以获得所有列表的行为。
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2017-10-18
    • 2022-01-12
    • 2015-08-19
    相关资源
    最近更新 更多