我有一个TreeView控件,它包含多个元素、节点。是否有方法根据某些条件更改选定项的前景颜色或背景色(默认情况下,将白色前景的蓝色背景应用于所选元素)。在我的例子中,我将检索一个对象并检查它的'NeedSync‘属性。如果它的值是真的,我希望元素有一个绿色的背景。如果是假的,我希望背景是红色的。
我查看了其他类似的线程,但需要使用treeview的_DrawItem方法更改未选定元素的颜色。在WPF中,应该通过更改控件样式和指定触发器来实现这一点。
在这里呢,在windows表单中?
编辑:我只需更改所选元素的字体颜色或背景色,其他一切都应保持相同的。是否有方法获取所选节点的默认样式源代码?实现drawNode方法将删除可折叠的图标、边距和其他一些东西。
发布于 2016-05-17 14:46:57
正如注释中所述,您需要将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"作为示例。)
注意:如果treeview失去焦点,您可能需要添加额外的(但类似的)逻辑来淡出颜色。
https://stackoverflow.com/questions/37278563
复制相似问题