Как применить DevExpress LookAndFeel к стороннему контролю
У меня есть сторонний элемент управления ( DevComponents.AdvTree.AdvTree) в моем проекте, и я должен иметь возможность применять DevExpress LookAndFeel (скин), используемый в моей форме. Я нашел этот пример из DevExpress, но это так далеко, как я не могу найти SkinEditorButtonPainter
эквивалент для DevExpress.XtraTreeList.TreeList
using System;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors.Drawing;
using DevExpress.LookAndFeel;
using DevExpress.XtraEditors.Controls;
using DevExpress.Utils.Drawing;
using DevExpress.Utils;
using System.ComponentModel;
namespace WindowsApplication1
{
[System.ComponentModel.DesignerCategory("")]
public class SkinnedStandardButton : Button
{
private EditorButton _Button = new EditorButton(ButtonPredefines.Glyph);
private SkinEditorButtonPainter _Painter;
public SkinnedStandardButton()
{
_Painter = CreatePainter();
}
private bool _UseSkins = true;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public bool UseSkins
{
get { return _UseSkins; }
set
{
_UseSkins = value;
Refresh();
}
}
protected virtual SkinEditorButtonPainter CreatePainter()
{
return new SkinEditorButtonPainter(UserLookAndFeel.Default);
}
private ObjectState GetObjectState()
{
Point location = PointToScreen(new Point(0, 0));
bool mouseInButton = new Rectangle(location, new Size(Width, Height)).Contains(Control.MousePosition);
if (!mouseInButton || DesignMode)
return ObjectState.Normal;
return Control.MouseButtons == MouseButtons.Left ? ObjectState.Pressed : ObjectState.Hot;
}
protected override void OnPaint(PaintEventArgs pevent)
{
if (UseSkins)
{
EditorButtonObjectInfoArgs args = new EditorButtonObjectInfoArgs(new GraphicsCache(pevent.Graphics), _Button, AppearanceObject.EmptyAppearance);
args.Bounds = new Rectangle(0, 0, Width, Height);
args.BuiltIn = false;
args.FillBackground = false;
args.State = GetObjectState();
args.Button.Caption = Text;
_Painter.DrawObject(args);
}
else
base.OnPaint(pevent);
}
}
}
Я не могу использовать DevExpress.XtraTreeList.TreeList
вместо DevComponents.AdvTree.AdvTree
потому что узлы и столбцы ОЧЕНЬ отличаются друг от друга между этими элементами управления и будет включать в себя изменение много кода