Изменение TreeNode.BackColor вызывает полную перерисовку TreeView - PullRequest
0 голосов
/ 22 июля 2010

Я установил BackColor определенных TreeNodes в TreeView как подсказку пользователю, что с узлом произошло что-то интересное, когда они используют приложение. Однако, когда я устанавливаю BackColor, он заставляет перерисовывать весь родительский элемент управления TreeView, а не только область метки определенного TreeNode, который был изменен. Я не вызываю Обновить или Обновить в любой момент - я просто устанавливаю BackColor на TreeNode. Кажется, что вместо того, чтобы просто сделать недействительными границы измененного TreeNode, TreeView обновляет всю его область. Это приводит к раздражающей быстрой вспышке управления.

Есть идеи, почему это происходит и можно ли это легко остановить?

1 Ответ

1 голос
/ 22 июля 2010

Не похоже, что вы можете остановить это. Я взглянул на код для установщика TreeNode.BackColor:

[SRDescription("TreeNodeBackColorDescr"), SRCategory("CatAppearance")]
public Color BackColor
{
    get
    {
        if (this.propBag == null)
        {
            return Color.Empty;
        }
        return this.propBag.BackColor;
    }
    set
    {
        Color backColor = this.BackColor;
        if (value.IsEmpty)
        {
            if (this.propBag != null)
            {
                this.propBag.BackColor = Color.Empty;
                this.RemovePropBagIfEmpty();
            }
            if (!backColor.IsEmpty)
            {
                this.InvalidateHostTree();
            }
        }
        else
        {
            if (this.propBag == null)
            {
                this.propBag = new OwnerDrawPropertyBag();
            }
            this.propBag.BackColor = value;
            if (!value.Equals(backColor))
            {
                this.InvalidateHostTree();
            }
        }
    }
}

Всякий раз, когда изменяется BackColor, в дереве, содержащем узел, вводится недействительное значение. Опять же, глядя на функцию InvalidateHostTree, нет никаких флагов, которые можно установить, чтобы остановить обновление.

...