关于ListView美化问题...
需求,无法上图抱歉只能描述了:
winform ListView ,公司需要风格好看,但是我找不到网上现成第三方的,所以只能自己重绘,但是遇到一些问题;
首先要是有朋友能提供现成的控件下载,我就不用再重绘了;
重绘中具体遇到的问题:
我需要 ColumnHeader,自定义的背景线条等,已经实现但是我发现,假如我的ListView.Width有300px;假如我的ColumnHeader合起来不足300px那么,表头哪一行除了ColumnHeader以外会是默认的白色...
我有两个思路...
1,能直接把那白色重绘成我想要的样子,但是我找完了ListView的事件与方法都没找到....
2, 将所有的ColumnHeader总宽度固定为ListView的Width(我就是在这么做),但是这么做一旦用户拖动ColumnHeader宽度也是不行的,于是我用了OnColumnWidthChanging,想实现的效果,如果拖动的是最后一列,就不改变;否则假如拖动的是某列,就让它后面那列也改变Width,但是这样的话,假如我移动第一列,第二列的宽度会先变,然后变第一列,所以一直抖动,
于是我在代码里手动先改变第一列的width,并且取消这次改变,结果....无限触发OnColumnWidthChanging
代码如下:
int changeId=-1; protected override void OnColumnWidthChanging(ColumnWidthChangingEventArgs e) { if (changeId == -1 || e.ColumnIndex == changeId) { //如果是最后一列,禁止拖动 if (this.Columns[e.ColumnIndex].DisplayIndex == this.Columns.Count - 1) { e.NewWidth = this.Columns[e.ColumnIndex].Width; e.Cancel = true; } else { changeId = e.ColumnIndex; //this.Columns[e.ColumnIndex].Width = e.NewWidth; //e.NewWidth = this.Columns[e.ColumnIndex].Width; //e.Cancel = true; this.Columns[e.ColumnIndex + 1].Width -= (e.NewWidth - this.Columns[e.ColumnIndex].Width); } } base.OnColumnWidthChanging(e); } protected override void OnColumnWidthChanged(ColumnWidthChangedEventArgs e) { if (e.ColumnIndex == changeId) { changeId = -1; } base.OnColumnWidthChanged(e); }