我有一个TreeView控件,它包含多个元素,节点。有没有办法根据某些条件更改所选项目的前景色或背景色(默认为蓝色背景,白色前景应用于所选元素)。在我的情况下,我将检索一个对象并检查它的“NeedSync”#39;属性。如果它的值是真的,我想要元素 例如,有绿色背景。如果它是假的,我希望背景是红色的。
我查看了其他类似的线程,但是要求使用treeview的_DrawItem方法更改未选择元素的颜色。在WPF中,应该可以通过更改控件样式和指定触发器来实现。
这里怎么样,在windows窗体中?
编辑:我只需更改所选元素的字体颜色或背景颜色,其他所有内容应保持不变。有没有办法获取所选节点的默认样式源代码?实现drawNode方法会删除可折叠图标,边距和其他一些内容。
答案 0 :(得分:5)
正如评论中所述,您需要将DrawMode
属性更改为OwnerDrawText
,然后在DrawNode
事件中添加类似内容:
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
Brush foreColour;
Brush backColour;
if (e.Node.IsSelected)
{
if (e.Node.Text == "Node1")
{
// Special highlight colouring
foreColour = Brushes.Yellow;
backColour = Brushes.Red;
}
else
{
// Default highlight colouring
foreColour = SystemBrushes.HighlightText;
backColour = SystemBrushes.Highlight;
}
}
else {
if (e.Node.Text == "Node1")
{
// Special colouring
foreColour = Brushes.Red;
backColour = Brushes.Yellow;
}
else
{
// Default colouring
foreColour = SystemBrushes.WindowText;
backColour = SystemBrushes.Window;
}
}
e.Graphics.FillRectangle(backColour, e.Bounds);
e.Graphics.DrawString(e.Node.Text, treeView1.Font, foreColour, e.Bounds);
}
(我不知道你想要使用什么标准,所以我添加了e.Node.Text == "Node1"
作为例子。)
注意:如果树视图失去焦点,您可能需要添加其他(但类似的)逻辑来淡化颜色。