【问题标题】:Custom Property of a Custom User Control gets reset during rebuild自定义用户控件的自定义属性在重建期间被重置
【发布时间】:2024-04-30 11:55:01
【问题描述】:

我有以下属性

[DefaultValue(true), Category("Behavior")]
public bool EnableBinding { get; set; }        

[DefaultValue(false), Category("Behavior")]
public bool NeedApprove { get; set; }

当使用设计器更改并保存然后重建时,您通过设计器设置的新值将仅保留在属性 NeedApprove 中。 EnableBinding 总是被重置为 false。

试过

1) DesignerSerializationVisibility 属性,但是没用!

  • 可见
  • 隐藏
  • 内容

2) 将自动属性转换为完整属性 这行得通。但为什么?如果不转换为完整属性,我们不能实现这一目标吗?

【问题讨论】:

    标签: c# .net custom-controls custom-properties


    【解决方案1】:

    您应该在自定义用户控件构造函数中为 EnableBinding 属性分配初始值:

    public partial class CustomUserControl : UserControl {
        public CustomUserControl() {
            InitializeComponent();
            EnableBinding = true; // !!!
        }
        [DefaultValue(true), Category("Behavior")]
        public bool EnableBinding { get; set; }
        [DefaultValue(false), Category("Behavior")]
        public bool NeedApprove { get; set; }
    }
    

    如果没有,它将在反序列化过程中始终初始化为false

    【讨论】:

    • 您好 DmitryG,感谢您的回答。但是为什么我们需要在构造函数(如您所展示的)或转换为完整属性中特别提及默认值?属性 [DefaultValue(false)] 中有一个默认值。不是吗?
    • DefaultValue 属性不影响目标属性的实际值。它仅适用于设计时基础架构...
    • 嗨 DmitryG 非常感谢 :) 这个链接 msdn.microsoft.com/en-us/library/ms171834.aspx 还描述了为什么 Designer 序列化不同于 .Net 中的普通二进制 / XML / SOAP / JSON 序列化