有没有一种方法,我可以添加一个阴影在C#中(一个ListView项目view = LargeIcon
不使用第三方组件模式)?
我能想到的唯一的办法是通过绘制图像本身的阴影,但这样一来,当我点击图像,投影也将被高亮显示(因为它是图像的一部分!)。 因此,也许有一种方法,使当我点击一个项目的ListView只强调图像的特定区域?
有没有一种方法,我可以添加一个阴影在C#中(一个ListView项目view = LargeIcon
不使用第三方组件模式)?
我能想到的唯一的办法是通过绘制图像本身的阴影,但这样一来,当我点击图像,投影也将被高亮显示(因为它是图像的一部分!)。 因此,也许有一种方法,使当我点击一个项目的ListView只强调图像的特定区域?
最简单的方法是创建一个合适的阴影效果的位图和使用OwnerDrawing
的ListView
项目。
下面是一个例子:
public Form1()
{
InitializeComponent();
shadow = (Bitmap)Image.FromFile(aDropShadowBitmap);
overlay = new Bitmap(64, 64);
using (Graphics G = Graphics.FromImage(overlay))
G.Clear(Color.FromArgb(127, 31, 191, 255));
}
Bitmap shadow;
Bitmap overlay;
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
ListViewItem item = e.Item;
Point bLoc = new Point(e.Bounds.X + 35, e.Bounds.Y + 10);
Size imgS = imageList1.ImageSize;
e.Graphics.DrawImage(shadow, bLoc);
e.Graphics.DrawImage(imageList1.Images[e.ItemIndex], bLoc);
if ((e.State & ListViewItemStates.Selected) == ListViewItemStates.Selected)
{
e.Graphics.DrawImage(overlay, bLoc);
}
else { }
e.Graphics.DrawString(item.Text, listView1.Font, Brushes.Black,
bLoc.X, bLoc.Y + imgS.Height + 10);
}
它使用Images
在一个64x64 ImageList
,并用阴影(在Photoshop中创建)一个合适的80×80位图:
以可视化的选择我覆盖有半透明图像Bitmap overlay
。 下面是结果:
注 :由于是,结果有个微妙的问题:点击文本不会选择项目。 补救的办法是一个简单的解决方法..:
该ItemHeight
不能直接设置。 相反,它是从分配和适用的最大高度导出ImageLists
在这里: LargeImageList
和StateImageList
。
除非我们想额外的透明像素添加到我们的所有图像,我们可以通过添加第二放大项目的有效高度ImageList
与ImageSize 1x100
,并指定其为StateImageList
。 氖需要添加实际的Images
! 现在,该项目的文本也将选择的项目..!