Что ж, один из способов «достижения эквивалента стиля LVIS_CUT» будет следующим:
Используйте функцию, аналогичную
private void MakeCutList(ImageList sourceList, Color background)
{
Brush overlay = new SolidBrush(Color.FromArgb(128, BackColor));
Rectangle rect = new Rectangle(new Point(0, 0), sourceList.ImageSize);
foreach (Image img in sourceList.Images)
{
Bitmap cutBmp = new Bitmap(img.Width, img.Height);
using (Graphics g = Graphics.FromImage(cutBmp))
{
g.DrawImage(img, 0, 0);
g.FillRectangle(overlay, rect);
}
sourceList.Images.Add(cutBmp);
}
}
, чтобы взять список изображений, используемый вашим ListView (т.е. listView1.ImageList), и добавить «обрезанные» версии всех значков. Вы можете вызвать это сразу после InitializeComponent в вашей форме, например
public Form1()
{
InitializeComponent();
MakeCutList(listView1.LargeImageList, listView1.BackColor);
}
Тогда вы могли бы использовать такой код
private void SetCutState(ListViewItem lvi, Boolean isItemCut)
{
int originalListSize = lvi.ImageList.Images.Count / 2;
int baseIndex = lvi.ImageIndex % originalListSize;
int cutImagesOffset = originalListSize;
if (isItemCut)
{
lvi.ImageIndex = cutImagesOffset + baseIndex;
lvi.ForeColor = SystemColors.GrayText;
}
else
{
lvi.ImageIndex = baseIndex;
lvi.ForeColor = SystemColors.WindowText;
}
}
чтобы изменить состояние элемента на обрез или нет.
Как только вы это заработаете, вы можете попытаться поместить подобный код в подклассную версию элемента управления ListView.