0

我正在制作一个LongListboxSelector显示音轨的页面。每个项目都有Button“播放”以及TextBlock艺术家和标题信息。我正在使用BackgroundAudioPlayer. 我的愿望是制作下一个:当曲目正在播放时 - 图像Button是“暂停”,当曲目结束时 - 使其Button图像“播放”,并使下一曲目的Button图像“暂停”(下一首曲目自动播放)。我试过了,喜欢这个

    public AudioListPage()
    {
        InitializeComponent();
        BackgroundAudioPlayer.Instance.PlayStateChanged += Instance_PlayStateChanged;
    }

    void Instance_PlayStateChanged(object sender, EventArgs e)
    {
        if (BackgroundAudioPlayer.Instance.PlayerState == PlayState.Stopped)
        {
            IEnumerable buttons = AudioLLS.Descendants<Coding4Fun.Phone.Controls.RoundButton>();
            var test = new BitmapImage(new Uri(@"/Images/appbar.transport.pause.rest.png", UriKind.Relative));

            foreach (Coding4Fun.Phone.Controls.RoundButton item in buttons)
            {                   
                if (item.ImageSource == test)
                {
                    MessageBox.Show("in new image");
                    item.ImageSource = new BitmapImage(new Uri(@"/Images/appbar.transport.play.rest.png", UriKind.Relative));
                    buttons.GetEnumerator().MoveNext();
                    item.ImageSource = new BitmapImage(new Uri(@"/Images/appbar.transport.pause.rest.png", UriKind.Relative));
                }

            }
        }
    }

PlayState.Stopped当 track 结束时触发,next 将开始。我尝试使用LinqToVisualTreehelper in获取 LLS 中的所有按钮,IEnumerable buttons = AudioLLS.Descendants<Coding4Fun.Phone.Controls.RoundButton>()并将它们的图像与test. 但正如我所看到的 - 我做错了,因为阻止if(item.ImageSource == test)我的应用程序永远不会出现。请告诉我,我做错了什么?如果我解决问题的方法不好 - 请告诉我如何以简单的方式做到这一点。

4

1 回答 1

0

我在我的音频模型中添加了两个属性

    private bool isPlaing = false;
    public bool IsPlaing 
    { 
        get { return isPlaing; }
        set 
        { 
            isPlaing = value;
            OnPropertyChanged("IsPlaing");
            if (IsPlaing) Image = @"/Images/appbar.transport.pause.rest.png";
            else if (!IsPlaing) Image = @"/Images/appbar.transport.play.rest.png";
        }
    }
    private string image = @"/Images/appbar.transport.play.rest.png";
    public string Image { get { return image; } set { image = value; OnPropertyChanged("Image"); } }

playerStateChanged我添加

        if (BackgroundAudioPlayer.Instance.PlayerState == PlayState.Stopped)
        {
            for (int i = 0; i < AudioList.Count; i++)
            {
                if (AudioList[i].Url1 == currTrack)
                {
                    AudioList[i].IsPlaing = false;
                    currTrack = AudioList[i + 1].Url1;
                    AudioList[i + 1].IsPlaing = true;
                    break;
                }

                }
            }
            BackgroundAudioPlayer.Instance.Play();
        }

这样我就解决了我的问题。正如我所看到的 - 一切正常。

于 2013-01-17T00:05:09.737 回答