如何在.NET ListView中设置标题排序字形?

时间:2008-09-16 15:02:56

标签: listview sorting header themes glyph

如何在.NET 2.0 WinForms ListView中设置具有标题排序字形及其方向的列?

凹凸

listview是.net不是托管控件,它是Win32 ListView公共控件的一个非常薄的包装器。它甚至不是一个非常好的包装器 - 它不会暴露真实列表视图的所有功能。

Win32 listview通用控件支持使用主题绘制自己。其中一个主题元素是标题排序箭头。 Windows资源管理器的listview公共控件知道如何使用该主题元素绘制其中一列。

  • Win32 listview是否支持指定哪个列具有哪种排序顺序?
  • 是否在列表视图内部使用的Win32标头控件支持指定哪个列具有哪种排序顺序?
  • win32标题控件是否支持自定义绘图,所以我可以自己绘制标题排序字形?
  • win32 listview控件是否支持自定义标题绘图,所以我可以自己绘制标题排序标志符号?
  • .NET ListView控件是否支持自定义标题绘图,所以我可以自己绘制标题排序标志符号?

4 个答案:

答案 0 :(得分:3)

如果有人需要快速解决方案(它在列标题文本的开头绘制向上/向下箭头):

<强> ListViewExtensions.cs:

public static class ListViewExtensions
{
    public static void DrawSortArrow(this ListView listView, SortOrder sortOrder, int colIndex)
    {
        string upArrow = "▲   ";
        string downArrow = "▼   ";

        foreach (ColumnHeader ch in listView.Columns)
        {
            if (ch.Text.Contains(upArrow))
                ch.Text = ch.Text.Replace(upArrow, string.Empty);
            else if (ch.Text.Contains(downArrow))
                ch.Text = ch.Text.Replace(downArrow, string.Empty);
        }

        if (sortOrder == SortOrder.Ascending)
            listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, downArrow);
        else
            listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, upArrow);
    }
}

<强>用法:

private void lstOffers_ColumnClick(object sender, ColumnClickEventArgs e)
{
    lstOffers.DrawSortArrow(SortOrder.Descending, e.Column);
}

答案 1 :(得分:1)

我在列的标题中使用unicode箭头字符,并将标题设置为linkbutton。

答案 2 :(得分:1)

我使用的列表视图内嵌了它。它被称为XPTable ..我正在挖掘我的源代码以找到将根据排序顺序绘制字形的辅助类...这是我使用的代码here .. < / p>

希望这有帮助, 最好的祝福, 汤姆。

答案 3 :(得分:0)