【发布时间】:2011-02-01 18:43:20
【问题描述】:
我在我的一个 Windows 窗体中的 ListView 上放置了一个 BackgroundImage。
一切都按预期进行。但现在我只想将这张图片放在 ListView 中。
就像在 CSS 中一样:background-position: top right; 会将图像粘贴在元素的右上角。
有没有办法用windows窗体做到这一点?
非常感谢:)
【问题讨论】:
我在我的一个 Windows 窗体中的 ListView 上放置了一个 BackgroundImage。
一切都按预期进行。但现在我只想将这张图片放在 ListView 中。
就像在 CSS 中一样:background-position: top right; 会将图像粘贴在元素的右上角。
有没有办法用windows窗体做到这一点?
非常感谢:)
【问题讨论】:
这是可能的,所以是的,你可以。如果您不调整列表视图的大小,请调整大小或其他任何地方
(我猜需要一些优化,不知道)
Bitmap bmp = new Bitmap(listView1.Width, listView1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
SolidBrush br1 = new SolidBrush(Color.White);
g.FillRectangle(br1, 0, 0, listView1.Width, listView1.Height);
g.DrawImage(Image, listView1.Width - Image.Width, listView1.Height - pictureBox1.Image.Height);
}
listView1.BackgroundImage = bmp;
【讨论】:
简短的回答是:你不能。
This blog 记录了为什么 LVM_SETBKIMAGE 和拦截 WM_ERASEBKGROUND 不适用于 .NET ListViews。
我为这个问题找到的解决方案——在ObjectListView 项目中使用——是使用本机 ListView 控件的低级自定义绘制工具。实现起来很复杂,但(现在)很容易使用。
【讨论】:
我知道的唯一方法是从 ListView 继承并覆盖 OnPaintBackground 方法并自行使用 Graphics.DrawImage() 绘制图像。但是您必须自己计算位置;)您还可以为 System.Drawing.ContentAlignment 类型的对齐添加 costum 属性。
【讨论】:
否则你可以平铺图像,但它不会卡在一个地方。
listView1.BackgroundImageTiled = true;
【讨论】: