自定义控件在设计器中未公开图像属性

4
我制作了一个自定义的滑动条控件,主要是为了练手。我知道我本可以/应该只继承我需要的内容而不是重复造轮子,但是在这个过程中我学到了很多东西。 现在,我有很多属性,除了一些图像属性外,所有属性都显示在设计器中。这是我拥有的,模仿其他工作属性(那些都是int和颜色之类的,它们都按预期工作...),所以也许我应该用其他方式处理图像。底线是,我不知道我在做什么:)
编辑:我的自定义控件在Windows Forms解决方案中(VC#2008 Express),澄清一下,我的问题是在设计时我的控件的某些属性(Image属性)没有显示在属性选项卡中。
编辑2:在阅读DependencyProperty并完全无法理解该概念后(我非常菜鸟,在编写代码或者你们大师所谓的黑魔法方面),我已经习惯了让IDE解决我的所有问题,我很高兴看到IDE愉快地显示我的其他属性,例如Color BarColor,int Value等等。为什么Image LeftImage会有所不同,许多标准控件都具有Image属性,也许我认为IDE可以找出我所有错误是天真的,但是肯定微软的人在每次设置其控件中的图像属性时都没有构建一个新的编辑器。我的赌注是,他们重复使用了某些东西,我也应该能够这样做。
我被卡住了:(
以下是我的糟糕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之间的区别" - 实际上它们是相同的东西。当您向某个对象添加属性时,可以省略“Attribute”后缀。[DefaultValue(...)]创建了一个DefaultValueAttribute类的实例。 - Joe White
那么,我想创建一个实例,还是它已经被实例化了?我会尝试另一个并看看 ;) - mickey
好的,从你的解释中可以得出结论,从 DefaultValue 更改为 DefaultValueAttribute 没有任何区别... - mickey
好的,我找到了答案,但由于我是一个新用户,所以无法回答自己的问题。无论如何,大多数甚至所有的微软类都包含一个编辑器,因此在我的情况下应该很简单:http://msdn.microsoft.com/en-us/library/system.drawing.design.imageeditor.aspx。 - mickey
3个回答

1

一直都是正确的,问题在于我使用了私有访问器。如果我将其删除,它就可以工作了!还请查看我的重复问题:http://stackoverflow.com/questions/5956231/help-i-cant-get-my-properties-into-the-designer-propertygrid - mickey

0

为了在设计器中显示图像,您需要重写OnPaint方法进行绘制。

DefaultValue与DefaultValueAttribute相同。在.NET中,所有属性都是从System.Attribute继承的类,并且所有这些类都类似于Name*Attribute*,其中Attribute是固定的。然后,“DefaultValue”就像一个别名。


我认为他想显示属性,而不是图像本身。 - Vale

-1

你的例子并没有说明你的问题是什么,但如果你创建了自定义控件并想要从设计器中访问它的属性,你应该使用类似这样的方法:

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

希望这能对你有所帮助


谢谢!我会研究你的建议。我不太明白DependencyProperty是什么以及它有什么用处。对于我的其他属性,似乎很容易,它们只是神奇地出现在属性列表中,并带有适当的颜色选择器和文本框。我认为图像属性也会自动显示,我的控件不是第一个具有图像属性的控件,对吧? - mickey
通过 DependencyProperty 在类中注册属性,可以在 Xaml 中进行绑定。 - Dariusz Wickowski
@mickey我相信你可以用类似于其他属性的方式来完成它。只是我不知道怎么做...期待另一个答案。 - Vale
@Dariusz Wickowski - DependencyProperty是在WPF环境中使用的东西,但在我的Windows Forms项目(VC#2008 Express)中可能不需要,我是对的吗?我试图阅读DependencyProperty和FrameworkPropertyMetadata的相关资料,但我就是不理解。 - mickey
@mickey,非常抱歉我误解了,我无法帮忙WinForms的问题。 - Dariusz Wickowski
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接