JavaFXCSS中的-fx-text-fill和-fx-text-inner-color有什么区别?

从JavaFX CSS 参考指南中,我-fx-text-fill对使用它的属性有足够的了解。

在最近更新到 JavaFX 16 的更大的 JavaFX 项目上工作时,我遇到了一些 CSS 代码,这些代码-fx-text-inner-color显然用于实现完全相同的事情,即更改(在我的情况下)TextField 控件的文本颜色。

由于我找不到关于第二个财产的任何文件,我决定在这里询问。

有人能解释一下这两个属性之间的区别吗,为什么我们需要这两个属性,以及什么时候更喜欢一个?

回答

-fx-text-fill是为具有text属性(例如Labeled及其子类TextInputControl和子类)的控件定义的 CSS 属性。

如问题中所述,该属性列在JavaFX CSS 参考指南中。

-fx-text-inner-color不是属性,而是在默认样式表modena.css 中定义的查找颜色(本质上是 CSS 颜色变量)。它用作-fx-text-fill背景颜色设置为 的控件的属性值-fx-control-inner-background,即“文本框、密码框、列表、树和表格”。

-fx-text-inner-color在根级别更改将具有更改所有文本框、密码框、列表、树和表格的文本颜色的效果。

请注意, 的默认值-fx-text-inner-color设置为颜色阶梯,这取决于 的值-fx-control-inner-background。即,-fx-control-inner-background暗时(强度小于 45%)设置为-fx-light-text-color,亮时(强度大于 60%,默认情况下)设置为-fx-mid-text-color,否则设置为-fx-dark-text-color。这些默认值white#333black分别。

这些默认设置的效果是获得始终与背景对比的文本填充;所以如果你改变-fx-control-inner-background文本颜色的值会自动调整。

为应用程序定义生产级样式实际上有两种不同的方法:

  • 为您在应用程序中使用的所有控件定义样式。在这种方法中,您将设置每个控件的属性(或者至少是与默认值不同的属性)。这是更多的工作,但创建了一种“独立”样式,如果用户拥有带有新默认样式表的 JavaFX 实现,则该样式在未来更有可能变得健壮。

  • 点击默认样式表modena.css并更改所有内容所基于的查找颜色的值。这要容易得多。只需更改 的值,您就可以走很长的路-fx-base,大多数其他查找颜色都是从它定义的。其他关键的查找颜色是

    • -fx-background, 用于窗口和窗格的背景颜色
    • -fx-control-inner-background,用于文本框、列表、表格和树的背景颜色
    • -fx-dark-text-color-fx-mid-text-color、 和-fx-light-text-color,用于定义绘制的文本的颜色阶梯-fx-background-fx-control-inner-background
    • -fx-accent(选择)、-fx-default-button-fx-focus-color、 和-fx-faint-focus-color

    尝试创建一个应用程序并使用

     .root { -fx-base: black; }
    

    作为样式表,在任何地方都没有设置其他样式。您应该会看到一个非常有效的“黑暗主题”。您可能想要更改一些其他颜色,尤其是选择和聚焦,但只要进行这些更改,它就可以很好地工作。

    请注意,如果您使用更改查找颜色的方法,而不是单独为所有控件设置属性,则您对新的默认样式表并不健壮。您可以通过将用户代理样式表显式设置为MODENA

     Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);
    

以上是JavaFXCSS中的-fx-text-fill和-fx-text-inner-color有什么区别?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>