0

我有一个类,我正在使用具有以下属性的属性网格查看:

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”访问器。此时,即使我输入颜色的名称并回车,它也不会改变。

如果我取消选择对象(将属性网格的 selecteditem 设置为 null),然后重新选择对象,我就可以通过输入其名称来更改颜色。但是弹出窗口仍然不起作用。

有时它会出错,当您单击下拉箭头时甚至不会打开弹出窗口。

编辑:

这是弹出窗口的具体问题。如果我不使用弹出窗口,我不会遇到任何故障。打开弹出窗口基本上会暂停正在提交的更改(发送 PropertyChanged 事件),直到整个控件失去焦点。因此,一旦我单击另一个窗口或另一个可聚焦控件,属性网格就会更新更改。

问题是:为什么双击或按回车会导致更改提交,但单击弹出窗口中的项目却不会?

4

1 回答 1

1

我弄清楚是什么导致了这个问题。我已经在属性网格的父对象之一上设置了窗口样式 WS_EX_COMPOSITED。禁用此样式会导致 PropertyGrid 再次正常运行。

不幸的是,我需要这种样式来减少我的应用程序中的闪烁。所以我很可能不得不使用 PropertyGrid 以外的东西来更改我的对象的属性。

于 2012-11-21T16:34:19.957 回答