6

我试图弄清楚如何覆盖DataGrid.css中定义的 dataGridHeader 样式!GWT 核心。GWT 样式名称被 adler32 混淆了,所以我不能简单地在我的 css 中使用 .dataGridHeader。就我而言,我希望对空白进行简单的更改:正常。

我在这里看到过关于注入 css 的文章,但它们似乎都是类级别的,而不是像 DataGrid 这样的组件中使用的子样式。

如何覆盖在 DataGrid 等组件中使用的标题样式?

4

2 回答 2

10

就像使用任何ClientBundleand CssResource: 创建一个接口,该接口使用指向您自己的 CSS 文件(或者可能指向原始文件和您自己的文件,因此它们将组合在一起)的注释来扩展Datagrid.Resources和覆盖该dataGridStyle方法。@Source

这样做会覆盖应用程序中所有 DataGrids 的样式(它实际上取决于哪个CssResource实例ensureInjected()首先获得:来自原始实例的实例DataGrid.Resources或来自子接口的实例):因为您使用相同的返回类型 ( DataGrid.Style),混淆的类名将是相同的。

如果您想根据具体情况更改样式,那么,另外,声明一个扩展接口DataGrid.Style并将其用作dataGridStyle覆盖的返回类型:因为混淆的类名基于完全限定的接口名称和方法名称,您的DataGrid.Style子接口将生成与原始接口不同的混淆类名DataGrid.Style

然后当然是GWT.create()您的DataGrid.Resources子接口并将其作为参数传递给DataGrid构造函数。

另请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=6144

于 2012-06-04T08:06:27.600 回答
9

谢谢托马斯。

只是为了让读者更容易...

创建一个新接口

public interface GwtCssDataGridResources extends DataGrid.Resources {
      @Source({Style.DEFAULT_CSS, "gwtDataGrid.css"})
      Style dataGrid();
}

使用静态引用

public static final GwtCssDataGridResources gwtCssDataGridResources = GWT.create(GwtCssDataGridResources.class);

    static {
        gwtCssDataGridResources.dataGrid().ensureInjected();
    }

最后创建一个新的 CSS 文件 gwtDataGrid.css。请注意,如果您需要覆盖样式,则必须在每个定义上使用!important 。

.dataGridHeader {
    color: #FF0000 !important;
}

.dataGridFirstColumnHeader {
    -moz-border-radius-topleft: 5px;
    -webkit-border-top-left-radius: 5px;
}

.dataGridLastColumnHeader {
    -moz-border-radius-topright: 5px;
    -webkit-border-top-right-radius: 5px;
}

就是这样

于 2013-01-11T11:39:12.047 回答