绑定的JavaFX属性可以被CSS修改吗



在JavaFX中,属性绑定通常可以用于实现与ChangeListenerInvalidationListener相同的目标。如果受更改影响的属性可能需要在其他地方设置,则绑定是有问题的,因为无法设置绑定属性(除非绑定是双向的,它有自己的一组问题(。

在这种背景下,我需要知道绑定的属性(例如在皮肤中(是否可以通过样式文件中的CSS进行更改。

我正在开发一些控件,我想在这些控件中使用绑定设置默认值。如果"CSS更改"与设置值相同(这不起作用(,那么我将不得不求助于侦听器。

非常感谢您的参与。谢谢

简短回答,无

一个CCD_ 3具有一个相应的CCD_。后一类具有方法isSettable(Styleable),该方法表示(emphasismine(:

检查给定节点上的相应属性是否为可设置。在查找任何样式之前调用此方法给定的属性。它是抽象的,因此代码可以检查属性是可设置的,而无需扩展该属性一般来说如果属性不为null或未绑定,则该属性是可设置的

该方法的存在表明,StyleableProperty有可能由于某些任意原因而不可设置。

在实现自己的StyleableProperty和相应的CssMetaData时,必须实现此方法。如果StyleableProperty也实现Property,则此方法应检查Property是否绑定,如果绑定则返回false。这是对所有内部StyleableProperty(也是Property(执行的操作。此外,如果使用StyleablePropertyFactory,它创建的CssMetaData将检查StyleableProperty是否是Property的实例,然后检查其绑定状态。

即使isSettable返回true,当CSS引擎尝试设置StyleableProperty时,也会导致异常。正如您所提到的,无法设置绑定的Property。如果您尝试这样做,Property的所有标准实现都会抛出异常

话虽如此,你必须小心如何设置属性。有一个优先级被分配给用于设置StyleableProperty的方法。StyleableProperty的Javadoc告诉您哪些方法优先于其他方法。

StyleableProperty允许从CSS中设置javafx.beans.property的样式。

此接口允许CSS处理和javafx.beans.properties。该实现确保设置值为,按递增顺序并假定相等重要性:

  1. Application.setUserAgentStylesheet(java.lang.String(中用户代理样式表的样式
  2. 从代码中设置的值,例如调用Node.setOpacity(double(
  3. Scene.getStylesheets((或Parent.getStyleets((中的作者样式表中的样式
  4. Node.setStyle(java.lang.String(中的样式

最新更新