谁动了UserControl的背景色?

我发现我实现的一个UserControl 的背景色有些奇怪的行为。

当他被创建的时候,他的背景色是SystemColors.Control。 但是一旦他被resize,他的背景色就变成了Color.White。

En……,到底是谁在搞鬼?

起初,我override BackColor的setter并且在setter中设置了一个断点。但是当背景色变化时什么也没有发生。:(

我意识到除非显示的调用“BackColor = ……”,setter永远也不会被调用。我是多么愚蠢啊!

BackColorChange事件是一个来追踪BackColor变化的好地方。但是我也没有得到什么有用的信息。

这个问题的根本原因是ambient property(环境属性)。BackColor是一个ambient propertyambient property 是这样的一种属性,如果没有被设置过的话,他将从他的父控件中取值。换句话说,如果你没有显式设置过BackColor这个属性的话,这个属性将自动使用它的容器的BackColor的值。

为了解决这个问题,你可以显式的设定UserControl的BackColor或者设定容器的BackColor。

posted @ 2010-10-25 12:07  夜深沉  阅读(404)  评论(0)    收藏  举报