我正在使用具有以下属性的属性网格查看的类:
private Color _borderColor = Color.Black;
[Browsable(true)]
[Category("Appearance")]
[DisplayName("Border Color")]
[Description("The color of the border.")]
[DefaultValue(typeof(Color), "Black")]
public virtual Color BorderColor
{
get
{
return _borderColor;
}
set
{
if (_borderColor != value)
{
_borderColor = value;
Invalidate();
}
}
}
我遇到各种间歇性问题,使用属性网格更改此属性。
最初,我可以打开下拉弹出窗口。但是,当我选择一种颜色时,它不会改变属性。在调试时,它甚至不会调用“set”访问器。此时,即使我输入颜色名称并按Enter键,它也不会改变。
如果我取消选择对象(将属性网格的selecteditem设置为null),然后重新选择对象,则可以通过键入其名称来更改颜色。但弹出窗口仍无效。
有时它会发出错误,当你点击下拉箭头时,弹出窗口甚至都不会打开。
修改
这是弹出窗口的一个问题。如果我不使用弹出窗口,我不会有任何故障。打开弹出窗口基本上会暂停所提交的更改(发送PropertyChanged事件),直到整个控件失去焦点。因此,一旦我单击另一个窗口或另一个可聚焦控件,属性网格就会更新更改。
问题是:为什么双击或按Enter会导致更改提交,但是单击弹出窗口中的项目不会?
答案 0 :(得分:1)
我弄清楚是什么导致了这个问题。我在其中一个属性网格的父项上设置了窗口样式WS_EX_COMPOSITED。禁用此样式会导致PropertyGrid再次正常运行。
不幸的是,我需要这种风格来减少应用程序中的闪烁。所以我很可能不得不使用PropertyGrid以外的东西来改变我的对象的属性。