簡體   English   中英

樹視圖控件中所選元素的條件着色

[英]Conditional coloring of the selected element in a treeview control

我有一個TreeView控件,它包含多個元素,節點。 有沒有辦法根據某些條件更改所選項目的前景色背景色(默認為藍色背景,白色前景應用於所選元素)。 在我的例子中,我將檢索一個對象並檢查它的'NeedSync'屬性。 如果它的值是真的,我希望元素具有例如綠色背景。 如果它是假的,我希望背景是紅色的。

我查看了其他類似的線程,但是要求使用treeview的_DrawItem方法更改未選擇元素的顏色。 在WPF中,應該可以通過更改控件樣式和指定觸發器來實現。

在windows窗體中,這里怎么樣?

編輯: 我只需要更改所選元素的字體顏色或背景顏色,其他一切應保持不變 有沒有辦法獲取所選節點的默認樣式源代碼? 實現drawNode方法會刪除可折疊圖標,邊距和其他一些內容。

如評論中所述,您需要將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"作為例子。)

注意:如果樹視圖失去焦點,您可能需要添加其他(但類似的)邏輯來淡化顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM