在winrt中是否有itemcontainergenerator.status属性?

时间:2013-05-24 02:59:45

标签: c# xaml winrt-xaml

我正试图从列表视图中突出显示播放的歌曲,并遇到一些麻烦。通常,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中看不到的歌曲。这是我在发布应用程序之前需要解决的最后一件事。

1 个答案:

答案 0 :(得分:0)

如果ItemConatinerGenerator.ContainerFromIndex()返回null,则表示尚未生成该索引处的容器(即该项目的容器仍处于虚拟化状态)。

如果你有一个简短的集合,你可能会使用StackPanel作为ListView的ItemsPanel而不是VirtualizingStackPanel(默认值)。使用StackPanel,容器不会被虚拟化。如果你有一个更长的集合,虚拟化将更好地适应你的应用程序的性能。

您的方案似乎要求您“突出显示”某个项目索引的容器。如果要添加“高亮”效果,StyleSelector听起来很有前途。您也可以通过继承ListView / ListViewItem来实现这一点。您是否考虑过为您的场景重新调整选择的概念? ListView继承自Selector并支持一些SelectionModes。您可以使用“选择”视觉状态来显示“突出显示”效果。