简短的回答,不。
AStyleableProperty有对应的CssMetaData. 后一类具有isSettable(Styleable)说明(强调我的)的方法:
检查给定节点上的相应属性是否可设置。在为给定属性查找任何样式之前调用此方法。它是抽象的,因此代码可以在不扩展属性的情况下检查属性是否可设置。通常,如果该属性不为 null 或未绑定,则该属性是可设置的。
该方法的存在表明aStyleableProperty有可能由于某种任意原因而不可设置。
当实现你自己的StyleableProperty,以及相应的CssMetaData,你必须实现这个方法。如果StyleableProperty也实现了Property,那么这个方法应该检查是否Property被绑定,false如果是则返回。这是对所有 internal StyleablePropertys(也是 a Property)所做的。此外,如果您使用它StyleablePropertyFactory,CssMetaData它创建的将检查是否StyleableProperty是一个实例,Property然后检查它的绑定状态。
即使isSettable返回 true,当 CSS 引擎尝试设置StyleableProperty. 正如您自己提到的那样,Property无法设置界限。如果您尝试这样做,所有标准实现Property都会抛出异常。
话虽如此,您必须小心设置属性的方式。有一个优先级分配给用于设置StyleableProperty. JavadocStyleableProperty告诉您哪些方法优先于另一个。
StyleableProperty 允许从 CSS 设置 javafx.beans.property 样式。
这个接口允许 CSS 处理和 javafx.beans.property 之间的协调。该实现确保设置值的优先级按递增顺序并假设同等重要性:
- Application.setUserAgentStylesheet(java.lang.String) 中用户代理样式表的样式
- 从代码中设置的值,例如调用 Node.setOpacity(double)
- Scene.getStylesheets() 或 Parent.getStylesheets() 中作者样式表的样式
- 来自 Node.setStyle(java.lang.String) 的样式