能否通过CSS统一设置Composite及其子类的背景颜色?
SWT CSS 统一设置Composite及其子类背景色的解决方案
首先,你写的 .Foo Composite 只能选中类型为Composite的控件(也就是结构里那两个直接的Composite节点),不会自动匹配它的子类(比如Section、Combo这类继承自Composite的控件),所以达不到你要的统一设置效果。
要实现对Foo Shell下所有Composite及其子类(包括未知子类)的背景色设置,同时如果需要包含Canvas(它不继承Composite),可以用以下两种方案:
方案1:使用:super伪类匹配所有Composite子类
SWT CSS支持:super伪类,用来匹配所有继承自指定控件类的控件,包括类本身。写法如下:
.Foo Composite:super, .Foo Canvas { background-color: #FF0000; }
这个规则会选中:
- 所有
FooShell下的Composite控件 - 所有继承自Composite的控件(比如Combo、Section等未知子类)
- 所有
FooShell下的Canvas控件
方案2:通过widgetClass属性匹配
每个SWT控件都有widgetClass属性,包含其完整类名。可以用属性选择器匹配所有类名以Composite结尾的控件(对应继承自Composite的类):
.Foo *[widgetClass$="Composite"], .Foo Canvas { background-color: #FF0000; }
这种写法同样能覆盖Composite及其所有子类,同时单独指定Canvas。
如果不需要包含Canvas,只需要Composite及其子类,去掉对应的.Foo Canvas规则即可。
内容的提问来源于stack exchange,提问作者Bourbon_7
相关产品推荐
相关产品推荐

