2011-02-01 5 views
0

Я поместил BackgroundImage в свой ListView в одной из моих оконных форм.WinForms: позиционирование BackgroundView в ListView

Все работает должным образом. Но теперь мне хотелось бы позиционировать это изображение внутри ListView.

Как в CSS: background-position: top right; Приклеил бы изображение в верхнем правом углу элемента.

Есть ли способ сделать это с формой окон?

Большое спасибо :)

ответ

0

Короткий ответ: вы не можете.

This blog документы, почему LVM_SETBKIMAGE и перехват WM_ERASEBKGROUND не работают с .NET ListViews.

Решение, которое я нашел для этой проблемы, и которое используется в проекте ObjectListView, заключается в использовании низкоуровневых пользовательских возможностей рисования собственного элемента управления ListView. Это было сложно реализовать, но теперь (теперь) прост в использовании.

enter image description here

0

единственный способ, которым я знаю, чтобы наследовать от ListView и переопределить METHODE OnPaintBackground и нарисовать изображение с Graphics.DrawImage() по своему усмотрению. Но вы должны сами вычислить позицию;) Вы также можете добавить свойство costum для параметра типа System.Drawing.ContentAlignment.

+1

OnPaintBackground не запускается, покраска выполняется с помощью собственного элемента управления Windows. –

+0

О, ладно, я подумал, установив OwnerDraw в true, он должен работать ... – MBulli

2

Это возможно, так что да, вы можете. Нанести на изменении размера или где-нибудь еще, если вы не изменить размер ListView

(нужно Оптимизировать я думаю, не знает)

  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; 
0

иначе вы можете плитка изображения, но оно не застрять в одном месте ,

listView1.BackgroundImageTiled = true;

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