我正试图从列表视图中突出显示播放的歌曲,并遇到一些麻烦。通常,ltrolurrent是空的。这是我的代码......
private void highlightItem(String focused)
{
//songlistView.ItemContainerGenerator.ItemsChanged????;
ListViewItem lvicurrent = new ListViewItem();
if (lviPrevious != null)
{
lviPrevious.Background = new SolidColorBrush();
}
if (focused.Equals("songListview"))
{
lvicurrent = songlistView.ItemContainerGenerator.ContainerFromIndex(songIndex) as ListViewItem;
lviPrevious = lvicurrent;
lvicurrent.Background = new SolidColorBrush(Colors.LightGreen);
}
else if (focused.Equals("playListview"))
{
lvicurrent = playlistView.ItemContainerGenerator.ContainerFromIndex(songIndex) as ListViewItem;
lviPrevious = lvicurrent;
lvicurrent.Background = new SolidColorBrush(Colors.LightGreen);
}
}
private void StatusChangedEventHandler(object sender, EventArgs e)
{
}
我唯一可以在网上找到的就是等待状态完成,但据我所知,winrt中没有状态属性。
我的另一个问题是超过1首歌曲以绿色显示。我不知道为什么会这样,也许是因为它是一个虚拟化的堆栈面板...但是人们会认为它不会影响目前在stackpanel中看不到的歌曲。这是我在发布应用程序之前需要解决的最后一件事。
答案 0 :(得分:0)
如果ItemConatinerGenerator.ContainerFromIndex()返回null,则表示尚未生成该索引处的容器(即该项目的容器仍处于虚拟化状态)。
如果你有一个简短的集合,你可能会使用StackPanel作为ListView的ItemsPanel而不是VirtualizingStackPanel(默认值)。使用StackPanel,容器不会被虚拟化。如果你有一个更长的集合,虚拟化将更好地适应你的应用程序的性能。
您的方案似乎要求您“突出显示”某个项目索引的容器。如果要添加“高亮”效果,StyleSelector听起来很有前途。您也可以通过继承ListView / ListViewItem来实现这一点。您是否考虑过为您的场景重新调整选择的概念? ListView继承自Selector并支持一些SelectionModes。您可以使用“选择”视觉状态来显示“突出显示”效果。