覆盖GWT DataGrid滚动条样式的正确方法是什么?更具体地说,我希望恒定不透明度为1.0,而不是默认的过渡效果。
似乎无法将自定义资源传递给DataGrid中使用的CustomScrollPanel,默认情况下,CustomScrollPanel会为其滚动条设置默认的透明资源。
我已经尝试了以下内容:
调用setHorizontalScrollbar / setVerticalScrollbar设置新的滚动条。因为我无法访问DataGrid中的CustomScrollPanel属性(tableDataScroller),所以这不起作用。
将NativeHorizontalScrollbar.Style和NativeVerticalScrollbar.Style添加到我的CssResource并覆盖css中的nativeHorizontalScrollbarStyle和nativeVerticalScrollbarStyle。如果没有办法传递资源,这似乎不起作用。
使用:: - webkit-scrollbar selector和friends覆盖浏览器滚动条样式。虽然这适用于我的UI中的其他滚动条,但对于某些DataGrid滚动条属性,不透明度转换效果仍然存在。
答案 0 :(得分:1)
选项1通常是要采用的方式(或者至少应该如何使用CssResource
注入来覆盖窗口小部件样式)。不幸的是,正如您所猜测的那样,DataGrid
不会暴露其内部CustomScrollPanel
(请参阅相关的issue)。
按照问题中的建议扩展DataGrid
以展示其内部CustomScrollPanel
。这样你就可以用你想要的任何东西替换滚动条样式(和/或滚动条本身)(使用setHorizontalScrollbar()
/ setVerticalScrollbar()
)。
public class EnhancedDataGrid extends DataGrid {
/**
* Expose the inner CustomScrollPanel.
*/
public CustomScrollPanel getScrollPanel() {
HeaderPanel headerPanel = (HeaderPanel) getWidget();
return (CustomScrollPanel) headerPanel.getContentWidget();
}
}
或者您可以决定让它实现HasScrolling
以公开ScrollPanel
滚动合约的所有方法(只会委托给getScrollPanel()
方法)。