2011-05-10 107 views
3

我做了一个自定义的TrackBar控制曝光的图像性能,主要是作为一个练习。我知道我可以/应该继承我所需要的,而不是重新发明轮子,但在我的努力中我学到了很多东西。 现在,我有很多属性,除了几个图像属性外,它们都出现在设计器中。这就是我所模仿的其他工作特性(那些是整数和颜色,什么不是,他们都按预期工作......),所以也许我应该用其他方式来做图像。底线,我不知道我在做什么:)自定义控件不会在设计

编辑:我的自定义控件是在Windows窗体的解决方案(VC#2008 Express的),并澄清,我的问题是,我的一些控件的属性(图像属性)在设计期间未显示在属性选项卡中。

编辑2:读完DependencyProperty后,完全无法理解这个概念(我很小心编程技巧或者你们的大师称之为黑色巫术魔法?)。我已经习惯于让IDE解决所有的烦恼,我很高兴地看到,IDE高兴地表示我的其他属性,如Color BarColorint Value等等,等等,为什么会Image LeftImage是任何不同,很多标准控件的有图像属性,也许我认为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(); 
     } 
    } 

顺便说一句,默认值和DefaultValueAttribute之间的区别是什么

感谢您的指点和帮助? ! /的Mikael

+0

“默认值和DefaultValueAttribute之间的差异” - 他们实际上是一回事。当你添加一个属性的时候,你可以省略“属性”后缀。 [DefaultValue(...)]创建一个DefaultValueAttribute类的实例。 – 2011-05-10 12:48:02

+0

那么,我是不是要创建一个实例,或者它已经instanciated?我会尝试另一个,看看;) – mickey 2011-05-10 13:01:23

+0

好吧,正如你可以从你的解释得出结论,从DefaultValue'改变到DefaultValueAttribute'没有什么不同... – mickey 2011-05-10 13:05:50

回答

0

对于展,你需要重写OnPaint方法绘制它设计的图像。

默认值是相同的是DefaultValueAttribute。在.NET中所有属性clases从System.Attribute继承,而所有这些类中类似名称* 属性 *,其中属性是固定的。然后“DefaultValue”就像一个别名。

+0

I认为他想显示财产,而不是图像本身。 – Vale 2011-05-10 07:22:11

+0

这是正确的淡水河谷,我遇到财产没有列出的问题... – mickey 2011-05-10 07:23:42

0

您的例子并不表明究竟是你的问题,但如果你创建自定义的控制,并希望从设计者访问它的属性,你应该使用水木清华这样的:

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

希望这可以帮助你

+0

谢谢!我会研究你的建议。我不太明白什么是DependencyProperty以及它的优点。对于我的其他属性,它看起来很容易,它只是神奇地弹出到属性列表中,以及它合适的颜色选择器和文本框。我认为图像属性也会自动显示出来,我的意思是我的控制不是第一个具有图像属性的对象,对吧? – mickey 2011-05-10 07:44:05

+0

通过DependencyProperty在类中注册您的属性允许在Xaml中绑定到它 – 2011-05-10 07:58:14

+0

@mickey我相信您可以按照与其他属性相似的方式执行此操作。我只是不知道如何...期待着另一个答案。 – Vale 2011-05-10 08:00:25

相关问题