Как показать контрольную тему в дизайнере? - PullRequest
0 голосов
/ 22 июня 2019

У меня есть несколько пользовательских элементов управления (некоторые наследуются от TextBox, Button, ComboBox), к которым я хочу добавить темы. Итак, первое, что я сделал, это создал ThemeManager класс:

public class ThemeManager
{
    private static ThemeManager instance;

    private ITheme theme;

    public ITheme Theme
    {
        get => theme; set => theme = value;
    }

    private ThemeManager()
    {
        this.theme = new DefaultTheme();
    }

    public static ThemeManager Instance => instance ?? (instance = new ThemeManager());
}

Класс Theme - это простой класс, который имеет ряд различных свойств для цветов для различных частей элементов управления. В свой пользовательский элемент управления (например, наследование от TextBox) я добавил следующее:

[Browsable(false)]
public ThemeManager ThemeManager => ThemeManager.Instance;

public CustomTextBox()
    : base()
{
    SetStyle(ControlStyles.UserPaint, true);
}

Затем я переопределяю OnPaint и OnPaintBackground, чтобы сделать рисунок. Вышеуказанное работает нормально, когда приложение работает.

Тем не менее, я хотел бы просмотреть их также при разработке формы в конструкторе. Возможно ли это сделать? Нужно ли создавать Component и добавлять его в элемент управления только в режиме разработки?

...