Как я могу написать свои собственные структуры, которые можно использовать как свойство во время разработки?Мне нужно иметь возможность указать значение по умолчанию и выбрать список предопределенных структур для конструктора на выбор, во многом так же, как реализованы свойства цвета.
Кроме того, как я могуделать это с классами, как это делает шрифт?Как вы можете указать дополнительные свойства в окне свойств?
Я пишу пользовательский элемент управления, который имеет много различных элементов визуального типа, таких как цвета градиента, ширина, проценты и т. Д.Я хочу, чтобы все они были настраиваемыми, но также могли быть настроены одновременно с разными Styles
.Я могу сделать это во время выполнения, создав свойство структуры Style
и заставив его изменить все остальные свойства в установщике.Что бы я хотел, чтобы пользователи во время разработки могли выбирать заранее определенные Styles
, такие как «Светло-синий», «Темно-серый» и т. Д., Каждый из которых будет устанавливать все другие свойства пользовательского интерфейса (градиенты,и т. д.) Если бы я мог отобразить все свойства пользовательского интерфейса в свойстве «Стиль», то же самое, что «Жирный» и «Курсив» в «Шрифте», это было бы идеально.
Код:
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class GradientPanel : UserControl
{
public PanelStyle Style
{
get
{
return new PanelStyle()
{
BackgroundFade = this.BackgroundFade,
EdgeColor = this.EdgeColor,
BorderColor = this.BorderColor,
EdgeWidth = this.EdgeWidth,
LowerColor = this.LowerColor,
UpperColor = this.UpperColor
};
}
set
{
this.SuspendLayout();
this.BackgroundFade = value.BackgroundFade;
this.EdgeColor = value.EdgeColor;
this.BorderColor = value.BorderColor;
this.EdgeWidth = value.EdgeWidth;
this.LowerColor = value.LowerColor;
this.UpperColor = value.UpperColor;
this.ResumeLayout();
}
}
....
public struct PanelStyle
{
public float BackgroundFade;
public Color EdgeColor;
public int EdgeWidth;
public Color BorderColor;
public Color UpperColor;
public Color LowerColor;
public static PanelStyle System = new PanelStyle()
{
BackgroundFade = .7f,
EdgeColor = SystemColors.Window,
BorderColor = SystemColors.WindowFrame,
EdgeWidth = 6,
LowerColor = SystemColors.Control,
UpperColor = SystemColors.Window
};
}
}