为什么 Visual Studio 在其属性窗口中的某些属性在其他属性的设置器中被修改时不刷新?
这是一个例子:
public partial class MyControl: UserControl {
public MyControl() { InitializeComponent(); }
private bool myThing=false;
[Category("Behavior")]
public bool Mything {
get { return myThing; }
set {
myThing=value;
Enabled=!Enabled;
Visible=!Visible;
AllowDrop=!AllowDrop;
AutoScroll=!AutoScroll;
AutoSize=!AutoSize;
TabIndex+=2;
}
}
}
将这个类制作为类库,将其构建为 DLL,然后将此组件放入 Visual Studio 的工具箱。然后在 VS 中新建一个“Windows 窗体应用程序”,并将此组件(MyControl)从工具箱中放入 Form1。
现在通过单击更改 VS-property-editor 中的 Mything 属性。当它打开和关闭时,您可以看到(在属性编辑器中)它增加了 TabIndex,并AutoScroll
正确打开和关闭了 AutoSize 和属性,但不是 Enabled、Visible 和 AllowDrop 属性!这三个在属性编辑器中没有变化!!为什么?
您也可以使用 Button 而不是 UserControl 来尝试此操作,并且当 Enabled 属性关闭(通过 Mything-setter)时,您可以看到 Button 变为灰色,但仅在设计器视图中,在属性编辑器窗口中它仍然显示原值!!此外,如果您保存应用程序,您可以在 Form1.Designer.cs 中看到 Enabled 属性未刷新!下次加载项目时,它会加载未修改的值!(显示在属性编辑器窗口中)
我试过使用RefreshProperties
Attribute,我试过实现INotifyPropertyChanged
,但没有运气!:(
那么,为什么 Visual Studio 会在其属性编辑器中刷新某些属性而不会刷新其他属性呢?并且(在设置器代码中)我如何强制 Visual Studio 属性窗口刷新?
有任何想法吗?