2012-01-31 1 views
1

Я использую ObjectListView в проекте winforms C# и хочу показать небольшую иконку в одном из столбцов.Как центрировать изображение в столбце 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"; 
    }; 

Кто-нибудь занимался этим вопросом и знает пути к центру изображения?

ответ

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 делает использование имени изображения («значок» в этом примере).

По умолчанию изображения нарисованы на крайнем левом столбце, независимо от настроек, таких как выравнивание текста и т.д.

OwnerDraw Устанавливая истина для ObjectListView, изображения чудесным образом сосредоточены в колонке с никакого другого дополнения кода вообще. Это было неожиданное поведение, которое, вероятно, заслуживает большего изучения. На данный момент это работает, поэтому, возможно, этот совет поможет и кому-то другому.

+0

Я не могу удалить комментарий [edit], потому что stackoverflow продолжает настаивать на редактировании не менее 6 символов. Может кто-то, пожалуйста, удалите блок. –

+0

@Xan Что вы пытаетесь сделать? – JYelton

+0

Я просто добавил две точки с запятой и удалил скобу, но получил ошибку, что мне пришлось отредактировать не менее 6 символов. Поэтому я подумал, что добавлю немного глупостей и удалю их позже, но алгоритм слишком умен/раздражает :-) –

0

как насчет того, чтобы сделать список ownerdraw и центрировать изображение при его рисовании (вычисление x, зная границы столбца). Глядя на пример прямо сейчас ..

здесь: Center subitem Icon in ListView

надеюсь, что это помогает.

+0

Я видел связанный ответ и определенно думал об этом. Я надеялся, что может быть немного проще, учитывая, что мне нужно применить это исправление в нескольких местах. – JYelton

+0

вы можете подклассифицировать OLV, чтобы получить это поведение для всех ваших списков. – vulkanino

Смежные вопросы