none
如何设置UserControl的Image类型属性的缺省值? RRS feed

  • 问题

  • 定义了一个自定义控件,需要设置一个图片属性,并给一个缺省值:

    [Category("MyControl"),
     Description("Seperator Image"),
     DefaultValue(???)]
    public Image SeperatorImage { get; set; }
    缺省图片已经加入到项目Resource中。开始想设置为Properties.Resources.DefaultSeperatorImage,编译时报错,需要Constant,却又不能设置为
    const Image defaultSeperatorImage = Properties.Resources.DefaultSeperatorImage;

     


    Charles

    2012年12月19日 7:15

答案

  • 自己解决了。要点如下:

    1. 参考了http://msdn.microsoft.com/en-us/library/53b8022e.aspx
    2. Image不是Simple default value, 所以不能使用DefaultValueAttribute, 必须使用 ResetPropertyName and ShouldSerializePropertyName  组合。
    3. 为了能检查 ShouldSerializeSeperatorImage,必须将初值Image作为类中的一个变量。

    结果如下:

    private readonly Image defaultSeperatorImage = Properties.Resources.DefaultSeperatorImage;
    
    [Category("MyControl"),
     Description("Seperator Image")]
    public Image SeperatorImage { get; set; }
    
    private bool ShouldSerializeSeperatorImage()
    {
        return SeperatorImage != defaultSeperatorImage;
    }
    
    private void ResetSeperatorImage()
    {
        SeperatorImage = defaultSeperatorImage;
    }
    


    Charles

    2012年12月19日 8:18

全部回复

  • 自己解决了。要点如下:

    1. 参考了http://msdn.microsoft.com/en-us/library/53b8022e.aspx
    2. Image不是Simple default value, 所以不能使用DefaultValueAttribute, 必须使用 ResetPropertyName and ShouldSerializePropertyName  组合。
    3. 为了能检查 ShouldSerializeSeperatorImage,必须将初值Image作为类中的一个变量。

    结果如下:

    private readonly Image defaultSeperatorImage = Properties.Resources.DefaultSeperatorImage;
    
    [Category("MyControl"),
     Description("Seperator Image")]
    public Image SeperatorImage { get; set; }
    
    private bool ShouldSerializeSeperatorImage()
    {
        return SeperatorImage != defaultSeperatorImage;
    }
    
    private void ResetSeperatorImage()
    {
        SeperatorImage = defaultSeperatorImage;
    }
    


    Charles

    2012年12月19日 8:18
  • Hi 孙谦,

      欢迎来到MSDN中文论坛,感谢你及时的提供你的解决方案给论坛里的每位参与者,这样方便其他工程师在遇到类似问题能够及时解决。

     


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年12月20日 2:52
    版主