Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改ListView标题和网格线颜色_C#_Winforms - Fatal编程技术网

C# 更改ListView标题和网格线颜色

C# 更改ListView标题和网格线颜色,c#,winforms,C#,Winforms,我有一个windows窗体应用程序,我在其中添加了两个ListView,以便为用户保存一些数据,看起来是这样的 正如您所看到的,我的表单背景颜色是黑色的,因此列表视图的网格线和标题白色形成了令人讨厌的对比,因此在一个小时的搜索后,我决定在这里询问 [问题]:如何编辑列表视图标题和网格线的颜色以满足我的需要?您可以在DataGrid中执行此操作,但我认为ListView没有简单的方法,因为与DataGrid不同,这些线没有属性 <Style TargetType="{x:Type Data

我有一个windows窗体应用程序,我在其中添加了两个ListView,以便为用户保存一些数据,看起来是这样的

正如您所看到的,我的表单背景颜色是黑色的,因此列表视图的网格线和标题白色形成了令人讨厌的对比,因此在一个小时的搜索后,我决定在这里询问


[问题]:如何编辑列表视图标题和网格线的颜色以满足我的需要?

您可以在DataGrid中执行此操作,但我认为ListView没有简单的方法,因为与DataGrid不同,这些线没有属性

<Style TargetType="{x:Type DataGrid}">
    <Setter Property="HorizontalGridLinesBrush" Value="Red"/>
    <Setter Property="VerticalGridLinesBrush" Value="Green"/>
</Style>

将其放入应用程序资源或窗口资源中

除此之外,还有一种方法可以更改每个ListViewItem的边框颜色:

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="BorderBrush" Value="Red"/>
</Style>

似乎没有人对自定义
列表视图
以支持
网格线颜色
感兴趣。我试过这个,想在这里分享。当您滚动ListView项时,稍微闪烁一下(不是太多),这不是很好。不过这是可以接受的。我想我在这里缺乏一些关于win32的知识来让它更完美:

public class CustomListView : ListView {
        bool scrollDown;
        int lastScroll;
        public Color GridLinesColor {get;set;}
        [DllImport("user32")]
        private static extern int GetScrollPos(IntPtr hwnd, int nBar);
        public CustomListView(){
           GridLinesColor = Color.Red;
           DoubleBuffered = true;
           base.GridLines = false;//We should prevent the default drawing of gridlines.
        }
        public new bool GridLines {get;set;}
        protected override void WndProc(ref Message m)
        {                
            if (m.Msg == 0x20a){//WM_MOUSEWHEEL = 0x20a
                scrollDown = (m.WParam.ToInt64() >> 16) < 0;
            }
            if (m.Msg == 0x115){//WM_VSCROLL = 0x115
                int n = (m.WParam.ToInt32() >> 16);
                scrollDown = n > lastScroll;
                lastScroll = n;
            }                
            base.WndProc(ref m);
            if (m.Msg == 0xf && GridLines && Items.Count > 0&&View==View.Details)//WM_PAINT = 0xf
            {                    
                using (Graphics g = CreateGraphics())
                {
                    using(Pen p = new Pen(GridLinesColor)){
                      int w = -GetScrollPos(Handle, 0);
                      for (int i = 0; i < Columns.Count; i++)
                      {
                        w += Columns[i].Width;
                        g.DrawLine(p, new Point(w, 0), new Point(w, ClientSize.Height));
                      }
                      int a = Items[0].Bounds.Bottom - 1;
                      int b = Height - Items[0].Bounds.Y;
                      int c = Items[0].Bounds.Height;
                      for (int i = scrollDown ? a + (b/c) * c : a ; scrollDown ? i >= a : i < b ; i += scrollDown ? -c : c)
                      {
                        g.DrawLine(p, new Point(0, i), new Point(ClientSize.Width, i));
                      }                                      
                    }          
                }                 
            }

        }
}
公共类CustomListView:ListView{ bool向下滚动; 最后一卷; 公共颜色网格线颜色{get;set;} [DllImport(“user32”)] 私有静态外部int GetScrollPos(IntPtr hwnd,int nBar); 公共CustomListView(){ GridLinesColor=Color.Red; 双缓冲=真; base.GridLines=false;//我们应该防止默认绘制网格线。 } 公共新布尔网格线{get;set;} 受保护的覆盖无效WndProc(参考消息m) { 如果(m.Msg==0x20a){//WM_鼠标轮=0x20a scrollDown=(m.WParam.ToInt64()>>16)<0; } 如果(m.Msg==0x115){//WM_VSCROLL=0x115 int n=(m.WParam.ToInt32()>>16); scrollDown=n>lastScroll; lastcoll=n; } 基准WndProc(参考m); 如果(m.Msg==0xf&&GridLines&&Items.Count>0&&View==View.Details)//WM\u PAINT=0xf { 使用(Graphics g=CreateGraphics()) { 使用(画笔p=新画笔(网格线颜色)){ intw=-GetScrollPos(句柄,0); for(int i=0;i=a:i 更新:感谢Cody Gray的建议,我添加了处理水平滚动的代码。为了简单起见,我使用
GetScrollPos
,因为根据MSDN文档页面的建议,我们应该使用
GetScrollInfo


这可能吗?还是这个@RenniePet:对不起,你能看到你提供的两个主题都与我的问题相去甚远吗?。一个用于decexpress,另一个只解决标题颜色的问题,那么这些网格线呢?我也不能更改为其他任何内容,因为我的整个代码都构建在listview上,所以我需要对listview进行修复。没有其他选项。我的问题没有答案?gridlines属性仅用于设置它们是否可见。。。但是它没有提供我最需要的任何颜色调整选项。@Nobbacode其他的东西都很好,但是它没有解决我最大的问题,那就是网格的颜色lines@DanialEugen除非重写某些内容(请参阅本文):(第二篇文章),否则无法使用默认类执行此操作。您也可以考虑GRIDVIEW:非常感谢您的帮助+ 1,实际上是试图解决被问及的问题,即使在一个无用的答案已经被接受。我不能让它在我的WinForms虚拟机上闪烁(Win7,有无Aero)。但是代码还有一些其他的大问题。其中之一是没有实现的水平滚动,结果很难看。此外,由于未能调用Dispose,您正在泄漏笔对象。通过将创建内容包装到using语句中,您甚至可以重复使用同一笔对象,并将其自动处置。我不明白你为什么需要跟踪
下滚
状态。@CodyGray谢谢你的建议,事实上这只是演示。需要
向下滚动
,以便我们知道如果用户向下滚动,我们将从
底部
顶部
绘制
,否则(向上滚动)我们将从
顶部
底部
。它减少了一点闪烁(事实上,这不是闪烁,它是由绘制默认的
白线
引起的)。如果没有问题,我可以将接受的答案更改为最佳答案,但是如果代码已满,我会这样做,以便将来任何人都可以从我的线程中受益。