首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >treeview控件中选定元素的条件着色

treeview控件中选定元素的条件着色
EN

Stack Overflow用户
提问于 2016-05-17 14:10:07
回答 1查看 637关注 0票数 3

我有一个TreeView控件,它包含多个元素、节点。是否有方法根据某些条件更改选定项的前景颜色背景色(默认情况下,将白色前景的蓝色背景应用于所选元素)。在我的例子中,我将检索一个对象并检查它的'NeedSync‘属性。如果它的值是真的,我希望元素有一个绿色的背景。如果是假的,我希望背景是红色的。

我查看了其他类似的线程,但需要使用treeview的_DrawItem方法更改未选定元素的颜色。在WPF中,应该通过更改控件样式和指定触发器来实现这一点。

在这里呢,在windows表单中?

编辑:我只需更改所选元素的字体颜色或背景色,其他一切都应保持相同的。是否有方法获取所选节点的默认样式源代码?实现drawNode方法将删除可折叠的图标、边距和其他一些东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-17 14:46:57

正如注释中所述,您需要将DrawMode属性更改为OwnerDrawText,然后在DrawNode事件中有类似的内容:

代码语言:javascript
运行
复制
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失去焦点,您可能需要添加额外的(但类似的)逻辑来淡出颜色。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37278563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档