DevExpress的TreeList默認是沒有樹狀線的,修改TreeLineStyle屬性無效,這對於Tree並不好看。
解決方案一
官方解釋說對於DevExpress的標准主題是不支持TreeList有TreeLine的(不是技術問題,是設計理念不同),如DevExpress Style, DevExpress Dark Style、Office 2013、Office 2010, Visual Studio 2013, VS2010, Seven Classic等,默認如下:
而主題皮膚和其他皮膚是支持的。所以使用非標准皮膚就可以實現TreeLine的支持。
關於三類皮膚的划分如下:
解決方案二
很多時候,我們都會使用標准皮膚,只有使用代碼強制這個屬性,修改代碼如下:
Skin skin = GridSkins.GetSkin(treeList1.LookAndFeel); skin.Properties[GridSkins.OptShowTreeLine] = true;
效果如下:
雖然是實現了,但看起來還是怪怪的,領導還想要自行車。
最新款自動車
由於標准皮膚不支持+/-號(plus/minus),所以官方給出的解決方案:一是使用其他非標准皮膚,二是自定義繪制節點按鍵事件(CustomDrawNodeButton),代碼如下:
private void TreeList1_CustomDrawNodeButton(object sender, CustomDrawNodeButtonEventArgs e) { //1、矩形 Rectangle rect = Rectangle.Inflate(e.Bounds, 0, -2); //矩形背景 Brush backBrush = e.Cache.GetGradientBrush(rect, BackColor, BackColor, LinearGradientMode.ForwardDiagonal); e.Cache.FillRectangle(backBrush, rect); //矩形邊框 Pen pen = e.Cache.GetPen(Color.Gray); //pen.DashStyle = DashStyle.Dot; e.Cache.DrawRectangle(pen, rect); //2、顯示的文字 string displayCharacter = e.Expanded ? "-" : "+"; //文字格式 StringFormat outCharacterFormat = e.Appearance.GetStringFormat(); outCharacterFormat.Alignment = StringAlignment.Center; outCharacterFormat.LineAlignment = StringAlignment.Center; //繪制文字 e.Appearance.FontSizeDelta = -2; e.Appearance.FontStyleDelta = FontStyle.Bold; e.Cache.DrawString(displayCharacter, e.Appearance.Font,e.Cache.GetSolidBrush(ForeColor), rect, outCharacterFormat); //禁止默認繪畫 e.Handled = true; }
參考
https://www.devexpress.com/Support/Center/Question/Details/Q380748/force-treelines-on-treelist