Как сгруппировать свойства своего контрола
Имеется код, который создаёт новый контрол на основе стандартной кнопки. Там есть пара новых свойств, одно из которых CornerRound - которое отвечает за то, какие углы будут закруглены, однако в обозревателе свойств на вкладках конструкторов оно отображается некорректно.
Пример, как это должно выглядеть (Свойство Margin с несколькими вложенными полями):

Пример, как это выглядит сейчас:

Как видно, из скрина 2 группа CornerRound отображается просто как неизменяемое поле. Помогите это исправить.
Код:
public struct CornerRound
{
private const bool defVal = true;
public bool LeftUp { get; set; }
public bool LeftDown { get; set; }
public bool RightUp { get; set; }
public bool RightDown { get; set; }
private bool? all;
public bool All { get => all ?? false; set { all = LeftUp = LeftDown = RightUp = RightDown = value; } }
public CornerRound(bool leftUp = defVal, bool leftDown = defVal, bool rightUp = defVal, bool rightDown = defVal)
{
LeftUp = leftUp; LeftDown = leftDown; RightUp = rightUp; RightDown = rightDown;
all = leftUp & leftDown & rightUp & rightDown;
}
public CornerRound(bool all = defVal) : this(all, all, all, all) { }
}
public partial class DP_FlatButton : Button
{
private int borderSize = 0;
private int borderRadius = 0;
private Color borderColor = Color.Black;
public CornerRound cornerRound = new CornerRound(true);
[Category("DP Custom UI")]
public int BorderSize
{
get => borderSize;
set
{
borderSize = value;
this.Invalidate();
}
}
[Category("DP Custom UI")]
public int BorderRadius
{
get => borderRadius;
set
{
borderRadius = value;
this.Invalidate();
}
}
[Category("DP Custom UI")]
public Color BorderColor
{
get => borderColor;
set
{
borderColor = value;
this.Invalidate();
}
}
[Category("DP Custom UI")]
public CornerRound CornerRound { get => this.cornerRound; set => this.cornerRound = value; }
[Category("DP Custom UI")]
public Color TextColor { get => base.ForeColor; set => base.ForeColor = value; }
[Category("DP Custom UI")]
public Color BackgroundColor { get => base.BackColor; set => base.BackColor = value; }
}