当前位置: 首页 > 知识库问答 >
问题:

是否可以在Vaadin 14 /流网格中以编程方式设置样式

翟冷勋
2023-03-14

例如,我有一个网格,让用户使用Vaadin 8定义特定数据的颜色,我也希望在Vaadin 14/Flow中提供此选项。

在Vaadin 8中,我做到了(针对每种样式/数据类型):

Page.getCurrent().getStyles()
    .add(".MyCustomTheme .v-grid-cell." + cssName + " { background-color:" + userSelectedColor + "; }");

然后在网格代码中我会做:

addColumn(myColumn).setStyleGenerator(cssName);

在Vaadin 14 / Flow中,我有:

addColumn(myColumn).setClassNameGenerator(cssName);

然而,我似乎不知道如何以编程方式更改cssName的css值。本质上,我如何在Java代码中注入css的第一部分呢?

只是补充一下,我不能做任何事情,如以下所示:https://vaadin.com/docs/v14/flow/element-api/tutorial-dynamic-styling当我尝试执行grid.getElement().getStyle().set(…)时,这将应用于整个表而不是行。

共有1个答案

太叔京
2023-03-14

一种选择是使用TemplateRenderer注入样式,下面是一个例子。

grid.addColumn(TemplateRenderer.<Bean> of(
        "<div style$=\"[[item.styles]]\">[[item.data]]</div>")
        .withProperty("styles", "color: red")
        .withProperty("data", Bean::getData));

另请注意,网格的表及其单元格位于影子 DOM 中。因此,如果您使用的是setClassNameGenerator,则需要在Grid的样式模块中设置样式,而不是全局css。即设置生成器

grid.addColumn(..).setClassNameGenerator(item -> item.getData() < 0 ? "red" : null);

为css添加导入

@CssImport(value = "my-grid-styles.css", themeFor = "vaadin-grid")

在"前端/my-grid-styles.css"中使用

.red {
   color: red;
}

注意,正如在其他答案中所解释的,您也可以将颜色设置为来自css属性。

.red {
   color: var(--my-grid-cell-color);
}

然后,您可以使用(不需要JavaScript调用)在网格范围内定义该颜色的值

grid.getElement().getStyle().set("--my-grid-cell-color","red");
 类似资料:
  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。

  • 如何以编程方式设置属性?

  • 问题内容: 我有一个需要样式的HTML选择框。我宁愿只使用CSS,但是如果需要的话,我将使用jQuery填补空白。 谁能推荐一个好的教程或插件? 我知道,Google,但是我一直在搜索过去两个小时,但找不到符合我需要的内容。 它必须是: 与jQuery 1.3.2兼容 无障碍 不打扰 可以根据样式选择框的各个方面进行完全自定义 有人知道什么可以满足我的需求吗? 问题答案: 我已经看到了一些jQue

  • 问题内容: 是否可以在Android中以编程方式关闭静音模式? 问题答案: 为您解决。

  • 我在Android中以编程方式设置APN。当我运行代码时,我得到。如果我在清单中提到这个权限,我得到的错误就像这些权限只有SYSTEM APPS。你能帮我解决这个问题吗?参考链接

  • 问题内容: 我没有找到有关如何执行此操作的任何资源。只需更改播放器的颜色即可,:) 问题答案: 是! 具有“ controls”属性的HTML5音频标签使用浏览器的默认播放器。您可以根据自己的喜好自定义它,方法是不使用浏览器控件,而是滚动自己的控件并通过javascript与音频API对话。 幸运的是,其他人已经做到了。我现在最喜欢的播放器是jPlayer,它的风格非常好,效果很好。一探究竟。

  • 问题内容: 这有点难以描述,但我会尽力而为: 我正在开发一个使用自定义相机活动的android应用。在此摄影机活动中,我使用编程方式创建一个表面视图,并将其设置为xml布局文件中定义的框架布局(全屏显示)。 我现在的问题是,如何在框架布局中添加其他元素?仅以编程方式?我问,因为到目前为止,我只能以编程方式添加其他元素。我在xml布局中添加的元素没有出现在屏幕上。它们是否可能恰好位于我添加到框架布局