PropertyGrid不适用于选择颜色

时间:2012-11-20 20:43:37

标签: c# winforms propertygrid color-picker

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

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会导致更改提交,但是单击弹出窗口中的项目不会?

1 个答案:

答案 0 :(得分:1)

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

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