谁动了UserControl的背景色?
我发现我实现的一个UserControl 的背景色有些奇怪的行为。
当他被创建的时候,他的背景色是SystemColors.Control。 但是一旦他被resize,他的背景色就变成了Color.White。
En……,到底是谁在搞鬼?
起初,我override BackColor的setter并且在setter中设置了一个断点。但是当背景色变化时什么也没有发生。:(
我意识到除非显示的调用“BackColor = ……”,setter永远也不会被调用。我是多么愚蠢啊!
BackColorChange事件是一个来追踪BackColor变化的好地方。但是我也没有得到什么有用的信息。
这个问题的根本原因是ambient property(环境属性)。BackColor是一个ambient property。ambient property 是这样的一种属性,如果没有被设置过的话,他将从他的父控件中取值。换句话说,如果你没有显式设置过BackColor这个属性的话,这个属性将自动使用它的容器的BackColor的值。
为了解决这个问题,你可以显式的设定UserControl的BackColor或者设定容器的BackColor。
浙公网安备 33010602011771号