2017-08-02 40 views
0

請看下面的例子:TornadoFX如何將Node樣式(或styleClass)綁定到屬性?

class MainView : View("Example") { 
    val someBooleanProperty: SimpleBooleanProperty = SimpleBooleanProperty(true) 
    override val root = borderpane { 
     paddingAll = 20.0 
     center = button("Change bg color") { 
      action { 
       // let's assume that new someBooleanProperty value is updated 
       // from some API after button clicked 
       // so changing style of the borderpane in action block 
       // of the button is not the solution 
       someBooleanProperty.value = !someBooleanProperty.value 
      } 
     } 
    } 
} 

class Styles : Stylesheet() { 
    companion object { 
     val red by cssclass() 
     val green by cssclass() 
    } 

    init { 
     red { backgroundColor += Color.RED } 
     green { backgroundColor += Color.GREEN } 
    } 
} 

我怎麼能動態改變取決於someBooleanPropertyborderpane背景顏色(如紅色時true和綠色時false)?有沒有可能將CSS類綁定到一個屬性?是否有任何解決方案來做到這一點,而不使用CSS(意思是style塊內)

回答

1

如果你想切換一個類(添加或刪除基於布爾屬性的類),你可以使用Node.toggleClass(CssRule, ObservableValue<Boolean>)函數。

val someBooleanProperty = SimpleBooleanProperty(true) 
... 
borderpane { 
    toggleClass(Styles.red, someBooleanProperty) 
    toggleClass(Styles.green, someBooleanProperty.not()) 
} 

如果,另一方面,你要綁定到一個不斷變化的類值,你可以使用Node.bindClass(ObservableValue<CssRule>)功能。

val someClassyProperty = SimpleObjectProperty(Styles.red) 
... 
borderpane { 
    bindClass(someClassyProperty) 
} 

然後,您可以將類設置爲任何你想要的。

+0

完美,非常感謝你! – sk1ey

相關問題