是否可以在 属性 上动态设置 [DesignerSerializationVisibility] 属性?

Is it possible to set [DesignerSerializationVisibility] attribute on property dynamically?

我正在使用 Visual Studio 2013 和 我有以下枚举和属性:

public enum MoreButtonIcon
{
    Default,
    Calendar,
    Clock
}

[DefaultValue(false)]
public bool UseCustomButtonIcon
{
    get;
    set;
}

public MoreButtonIcon CustomButtonIcon
{
    get;
    set;
}

我希望 属性“CustomButtonIcon”仅在“UseCustomButtonIcon”为真时出现在设计器中。否则“CustomButtonIcon”应该被隐藏,或者至少被禁用。

是否可以设置: [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 属性 动态属性?

我假设您制作了一个自定义控件。就是这样,你不能真正动态地做到这一点,或者换句话说,用设计师的术语 - 运行时。但是您可以做的是在您的 CustomButtonIcon 属性:

上添加一个检查
    enum MoreButtonIcon
    {
        Default,
        Calendar,
        Clock,
        UNKNOWN
    }

    private MoreButtonIcon _customButtonIcon = MoreButtonIcon.UNKNOWN;
    public MoreButtonIcon CustomButtonIcon
    {
        get => _customButtonIcon;
        set
        {
            _customButtonIcon = UseCustomButtonIcon ? value : MoreButtonIcon.UNKNOWN;
            if (DesignMode) Refresh();
        }
    }

不,那是不可能的,但您可以为您的属性添加验证:

private MoreButtonIcon customButtonIcon;
public MoreButtonIcon CustomButtonIcon
{
  get { return this.customButtonIcon; }
  set
  {
    if(!this.UseCustomButtonIcon)
      throw new Exception("UseCustomButtonIcon is false!");
    this.customButtonIcon = value;
  }
}