【问题标题】:WinForms: ListView's BackgroundImage positioningWinForms:ListView的BackgroundImage定位
【发布时间】:2011-02-01 18:43:20
【问题描述】:

我在我的一个 Windows 窗体中的 ListView 上放置了一个 BackgroundImage。

一切都按预期进行。但现在我只想将这张图片放在 ListView 中。

就像在 CSS 中一样:background-position: top right; 会将图像粘贴在元素的右上角。

有没有办法用windows窗体做到这一点?

非常感谢:)

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

    这是可能的,所以是的,你可以。如果您不调整列表视图的大小,请调整大小或其他任何地方

    (我猜需要一些优化,不知道)

                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;
    

    【讨论】:

      【解决方案2】:

      简短的回答是:你不能。

      This blog 记录了为什么 LVM_SETBKIMAGE 和拦截 WM_ERASEBKGROUND 不适用于 .NET ListViews。

      我为这个问题找到的解决方案——在ObjectListView 项目中使用——是使用本机 ListView 控件的低级自定义绘制工具。实现起来很复杂,但(现在)很容易使用。

      【讨论】:

        【解决方案3】:

        我知道的唯一方法是从 ListView 继承并覆盖 OnPaintBackground 方法并自行使用 Graphics.DrawImage() 绘制图像。但是您必须自己计算位置;)您还可以为 System.Drawing.ContentAlignment 类型的对齐添加 costum 属性。

        【讨论】:

        • OnPaintBackground 不运行,绘制由本机 Windows 控件完成。
        【解决方案4】:

        否则你可以平铺图像,但它不会卡在一个地方。

        listView1.BackgroundImageTiled = true;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-24
          • 1970-01-01
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          相关资源
          最近更新 更多