需求是实现列表播放,即一个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后就可以直接播放?
<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后就可以直接播放?
试了一下,情况依旧,将button换成了hyerlinkbutton后ButtonAutomationPeer就用不了了
断点试了一下,发现都是通过的,唯一的差别就在点cmd_play的时候,播放正常,点ListBox就不正常了。
是说直接用cmdPlay_Click(sender ,e);吗?这个是一样的,我试过。
{
if (sliderPositionBackground.Value != 0)
{
//处于暂停状态则继续播放
media.Position = TimeSpan.FromSeconds(sliderPositionBackground.Value);
media.Play();
timer.Start();
}
else
{
//处于停止状态则开始播放
media.Stop();
media.Play();
timer.Start();
} }
Silverlight是不可以使用PerformClick()的。