[英]Display the particular rows in datagridview selected by the treeview control
[英]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.