我已經把我的ListView中的一個BackgroundImage放在我的一個窗體中。WinForms:ListView的BackgroundImage定位
一切按預期工作。但是現在我只想將這個圖像定位在ListView中。
像CSS一樣:background-position: top right;
將圖像粘貼在元素的右上角。
有沒有這樣做的Windows窗體的方式?
感謝很多:)
我已經把我的ListView中的一個BackgroundImage放在我的一個窗體中。WinForms:ListView的BackgroundImage定位
一切按預期工作。但是現在我只想將這個圖像定位在ListView中。
像CSS一樣:background-position: top right;
將圖像粘貼在元素的右上角。
有沒有這樣做的Windows窗體的方式?
感謝很多:)
簡短的回答是:你不能。
This blog文件爲什麼LVM_SETBKIMAGE
和攔截WM_ERASEBKGROUND
不能與.NET ListViews一起使用。
我發現這個問題的解決方案(在ObjectListView項目中使用的解決方案)是使用本機ListView控件的低級定製繪圖工具。實施起來很複雜,但(現在)很容易使用。
我知道的唯一途徑是從的ListView繼承和覆蓋OnPaintBackground梅索德,並與自己的Graphics.DrawImage()繪製圖像。但是你必須自己計算位置;)還可以添加一個Costum屬性,用於System.Drawing.ContentAlignment類型的對齊。
這是可能的,所以是的,可以。放在調整大小或其他任何地方,如果你不調整列表視圖
(需要一些優化我猜,不知道)
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;
否則可以平鋪圖像,但它不會停留在一個地方。
listView1.BackgroundImageTiled = true;
OnPaintBackground不運行,繪畫是由本地Windows控件完成的。 – 2011-02-01 19:33:28