Пользовательский элемент управления не отображает свойства изображения в конструкторе - PullRequest
4 голосов
/ 10 мая 2011

Я сделал пользовательский трекбар, в основном как упражнение. Я знаю, что мог / должен был просто унаследовать то, что мне нужно, вместо того, чтобы заново изобретать колесо, но я многому научился за время моей работы. Теперь у меня много свойств, и все они отображаются в конструкторе, за исключением нескольких свойств изображения. Это то, что у меня есть, смоделировано на других рабочих свойствах (это целые и цвета, а что нет, и все они работают как положено ...), так что, возможно, я должен делать изображения другим способом. Итог, я не знаю, что я делаю:)

РЕДАКТИРОВАТЬ: Мой пользовательский элемент управления находится в решении 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?

Спасибо за любые указатели и помощь! / Микаэл * * тысячу двадцать-один

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Я нашел здесь кое-что: http://msdn.microsoft.com/en-us/library/system.drawing.design.imageeditor.aspx

Считайте, что это решено.

0 голосов
/ 10 мая 2011

Ваш пример не показывает, в чем именно заключается ваша проблема, но если вы создаете пользовательский элемент управления и хотите получить доступ к его свойствам из конструктора, вы должны использовать что-то вроде этого:

        public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(object), typeof(CustomControl),
        new FrameworkPropertyMetadata(null, ValueChanged));

надеюсь, что это поможет вам

0 голосов
/ 10 мая 2011

Для отображения изображения в конструкторе необходимо переопределить метод OnPaint, рисуя его.

DefaultValue - это то же самое, что DefaultValueAttribute. Все атрибуты в .NET являются предложениями, которые наследуются от System.Attribute, а все эти классы похожи на Name * Attribute *, где Attribute фиксирован. Тогда «DefaultValue» похоже на псевдоним.

...