Как я могу написать свои собственные структуры, которые могут использоваться как свойство во время разработки? Мне нужно уметь указывать значение по умолчанию и иметь выбираемый список предварительно определенных структур для выбора дизайнера, во многом так же, как реализованы свойства Color.Перечисление структур и классов для свойств во время разработки
Кроме того, как я могу это сделать с помощью классов, например, Font? Как вы можете указать под-свойства в окне свойств?
Я пишу пользовательский элемент управления, который имеет много различных элементов визуального типа, такие как градиентные цвета, ширины, проценты и т.д. Я хочу это всем быть настраиваемым, но и быть в состоянии установить все сразу с разными Styles
. Я могу сделать это во время выполнения, создав свойство struct 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
};
}
}
Можете ли вы опубликовать несколько примеров того, как вы хотите, чтобы ваш код работал с этими структурами? – Oded
Для всех этих материалов с дизайном лучшая книга, которую я использовал, была http://www.sellsbrothers.com/writing/wfbook, руки вниз. Много инструкций о том, как это сделать, я не смог найти информацию нигде. С тех пор я слишком много работал над такими вещами, чтобы предложить лучший совет. И я помню, что это очень печально, даже с большим ресурсом. – overslacked