Пользовательский элемент управления не отображает свойства изображения в конструкторе
Я сделал пользовательский трекбар, в основном как упражнение. Я знаю, что мог / должен был просто унаследовать то, что мне нужно, вместо того, чтобы заново изобретать колесо, но я многому научился за время своей работы. Теперь у меня много свойств, и все они отображаются в конструкторе, кроме пары свойств изображения. Это то, что у меня есть, смоделировано на других рабочих свойствах (это целые и цвета, а что нет, и все они работают как положено...), так что, возможно, я должен делать изображения другим способом. Итог, я не знаю, что я делаю:)
РЕДАКТИРОВАТЬ: Мой пользовательский элемент управления находится в решении Windows Forms (VC# 2008 Express), и, чтобы уточнить, моя проблема заключается в том, что некоторые свойства моего элемента управления (свойства изображения) не отображаются на вкладке свойств во время разработки.
РЕДАКТИРОВАТЬ 2: После прочтения на DependencyProperty и полностью не смог понять эту концепцию (я очень noob в программировании Codez или, как вы, гуру, называете это черная магия вуду??). Я привык позволять IDE исправлять все мои проблемы, и я был рад видеть, что IDE с радостью показывает другие мои свойства, такие как Color BarColor
, int Value
и тд и тп Image LeftImage
Как бы то ни было, многие стандартные элементы управления имеют свойства Image, и, возможно, мне наивно полагать, что IDE может понять все мои ошибки, но, конечно, ребята из Microsoft не создавали новый редактор каждый раз, когда им приходилось устанавливать свойство изображения в их элементах управления. Я держу пари, что они что-то повторно использовали, что я тоже смогу сделать.
Я застрял:(
Вот мой дерьмовый CoD3Z в любом случае:
private Image _LeftImage;
/// <summary>
/// Sets the small image appearing to the left of the trackbar
/// </summary>
[Description("The small image appearing to the left of the trackbar"),
Category("Appearance"),
DefaultValue(typeof(Image),"null"),
Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
public Image LeftImage
{
private get { return _LeftImage; }
set
{
if (value.Height != 16 || value.Width != 16)
{
_LeftImage = new Bitmap(value,new Size(16,16));
}
else _LeftImage = value;
Invalidate();
}
}
Кстати, в чем разница между DefaultValue и DefaultValueAttribute?
Спасибо за любые указатели и помощь! /Mikael
3 ответа
Я нашел кое-что здесь: http://msdn.microsoft.com/en-us/library/system.drawing.design.imageeditor.aspx
Считайте, что это решено.
Для отображения изображения в дизайнере вам необходимо переопределить метод OnPaint, рисуя его.
DefaultValue - это то же самое, что DefaultValueAttribute. Все атрибуты в.NET являются предложениями, которые наследуются от System.Attribute, а все эти классы являются чем-то вроде Name *Attribute*, где Attribute является фиксированным. Тогда "DefaultValue" похоже на псевдоним.
Ваш пример не показывает, что именно является вашей проблемой, но если вы создаете пользовательский элемент управления и хотите получить доступ к его свойствам из конструктора, вы должны использовать что-то вроде этого:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(CustomControl),
new FrameworkPropertyMetadata(null, ValueChanged));
надеюсь, это поможет вам