我启用了材料设计(黑暗主题)。
一些教程告诉我使用background属性来设置我自己的自定义颜色的Rectangle项。就像在这个截图中一样:
但是使用这种技术我不再具有这些漂亮的涟漪效应了。我想做的只是改变所有项目的背景和文字颜色。
所以我试着在没有运气的情况下改变背景的属性。在启动时,调试输出告诉我背景中没有颜色属性。
所以我想出了一个使用Bindings的“hacky”方法......现在属性存在了!?
这是实现目标的最佳方式吗?点击时会出现涟漪效应,但我对此并没有很好的感觉。我不明白为什么在使用Bindings时属性存在以及为什么它们在使用普通数据绑定时不存在。
ItemDelegate {
width: ListView.view.width
height: contentItem.implicitHeight + 10
topPadding: 5
bottomPadding: 5
highlighted: ListView.view.currentIndex === model.index
//background.color: highlighted ? "#81A3CF" : "#B3B2B2"
Binding {
target: background
property: "color"
value: highlighted ? "#81A3CF" : "#B3B2B2"
}
text: model.index + (highlighted ? " [highlighted]" : "")
//contentItem.color: "black"
Binding {
target: contentItem
property: "color"
value: "black"
}
onClicked: {
if(ListView.view.currentIndex === model.index)
ListView.view.currentIndex = -1;
else
ListView.view.currentIndex = model.index
}
}
答案 0 :(得分:1)
原因很简单:
background
被声明为Item
- 而Item
没有color
,所以在分配具体Item
之前,您无法更改它}有一个color
。因此,当您执行QML
- 文件时,Rectangle
尚未可用,直到创建完所有内容。这是Binding
将设置颜色的时间。
如果你不需要它绑定任何东西,另一个解决方案是使用:
Component.onCompleted: background.color = 'green'
否则,我认为Binding
- 技巧很好(但这是意见!)
答案 1 :(得分:0)
我不确定您为什么要更改商品代表的背景颜色。在ListView中直观地突出显示所选项目的常规方法是创建一个组件(通常使用矩形)并将其分配给ListView的高亮属性,然后将ListView的highlightFollowsCurrentItem设置为true。当currentIndex更改时,ListView将隐藏并显示高亮组件,如果需要,您可以指定各种过渡效果。