需求是实现列表播放,即一个ListBox里有了一堆的播放地址,单击此播放地址即可播放歌曲                    <!--播放键-->
                    <Button Name="cmd_play" Click="cmdPlay_Click" Padding="15" Margin="5">
                        <StackPanel>
                            <Polygon Points="0,0 0,10 10,5" Fill="Green"></Polygon>
                        </StackPanel>
                    </Button>                <!--播放列表-->
                <ListBox Name="PlayList" MouseLeftButtonUp="ListBox_MouseEnter" Width="200" Height="150" Margin="5,5,-5,0">        //播放键
        private void cmdPlay_Click(object sender, RoutedEventArgs e)
        {
            //判断播放器是否处于暂停状态
            if (sliderPositionBackground.Value != 0)
            {
                //处于暂停状态则继续播放
                media.Position = TimeSpan.FromSeconds(sliderPositionBackground.Value);
                media.Play();
                timer.Start();
            }
            else
            {
                //处于停止状态则开始播放
                media.Stop();
                media.Play();
                timer.Start();
            }
        }
//这里的代码是从网上搜到的,用于在ListBox单击发生时,自动调用cmd_play这个按钮的事件。
        private void ListBox_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
        {
               
            media.Source = new Uri(PlayList.SelectedItem.ToString());
            //cmdPlay_Click(sender ,e);
            ButtonAutomationPeer bam = new ButtonAutomationPeer(cmd_play);
            IInvokeProvider iip = bam.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
            iip.Invoke();        }现在的情况是我点了ListBox后必须再点一次cmd_play按钮才能正常播放(也尝试过将cmd_play事件里的代码直接放到ListBox事件里,也是需要再点一次cmd_play)如何修改代码,才能点了ListBox后就可以直接播放?

解决方案 »

  1.   

    将Button控件换成hyperlink button试试。
      

  2.   


    试了一下,情况依旧,将button换成了hyerlinkbutton后ButtonAutomationPeer就用不了了
      

  3.   

    你先加个断点 看看你点第一次的时候执行没有执行事件里的代码StackPanel去掉在调试
      

  4.   


    断点试了一下,发现都是通过的,唯一的差别就在点cmd_play的时候,播放正常,点ListBox就不正常了。
      

  5.   

    让那个Listbox自动回传,然后调用Button的Click事件不行?
      

  6.   


    是说直接用cmdPlay_Click(sender ,e);吗?这个是一样的,我试过。
      

  7.   

    private void listBox1_DoubleClick(object sender, EventArgs e)
            {
    if (sliderPositionBackground.Value != 0)
                {
                    //处于暂停状态则继续播放
                    media.Position = TimeSpan.FromSeconds(sliderPositionBackground.Value);
                    media.Play();
                    timer.Start();
                }
                else
                {
                    //处于停止状态则开始播放
                    media.Stop();
                    media.Play();
                    timer.Start();
                }        }
      

  8.   

    没有发现异常,单步运行也是一样的通过代码走的,唯一不同的就是点了ListBox,media.play没起作用,而点button则起作用了,代码都一样的通过了这让我郁闷坏了~难道是我的Silverlight开发包有问题?
      

  9.   

    用线程试试   播放的时候start线程
    --reply by CSDN Study Trial V1.0.1 (starts_2000)
      

  10.   


    Silverlight是不可以使用PerformClick()的。
      

  11.   

    已经不怎么用 asp.net 开发了。用.net mvc 呵呵