2012-06-13 176 views
0

WP7.5/Silverlight应用程序......只在第一次页面加载

在我的页面加载,我玩的是声音片段(如您好!今天是美好的一天。)

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    seLoadInstance = seLoad.CreateInstance(); //I initialize this seLoad in Initialize method 
    seLoadInstance.Play(); 
} 
播放SoundEffect中

现在我在页面上有3-4个其他元素。当用户点击其中任何一个时,该元素的声音剪辑就会播放。

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    seElementInstance = seElement.CreateInstance(); 
    seElementInstance .Play(); 
} 

我要的是: 当要播放的第一次加载页面,并同时seLoadInstance正在播放和用户点击的元素,我不想seElementInstance。

我可以检查seLoadInstance的状态就像下面不玩seElementInstance

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if(seLoadTextInstance.State != SoundState.Playing) 
    {  
     seElementInstance = seElement.CreateInstance(); 
     seElementInstance .Play(); 
    } 
} 

但上面的问题是,我有另一种元素,可起到seLoadInstance它的点击。

问题:我不知道如何区分正在播放的seLoadInstance是第一次还是单击元素时。

可能的解决方案:我看到的一种方式是使用不同的实例播放相同的声音。

我希望有一些更好的方法,比如我在加载时设置了一个标志,但是我找不到SoundInstance已完成或停止的任何显式事件,我可以处理。

任何想法??

回答

0

我能找到标志使用办法。在第一次加载完成时,我没有设置标志,而是从播放seLoadTextInstance的元素之一设置标志。

类似下面:

private bool isElementLoadSoundPlaying = false; //I set this to true below in another handler 

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    //This if means LoadTextInstance is playing and it is the first time play 
    if(seLoadTextInstance.State != SoundState.Playing && isElementLoadSoundPlaying == false) 
    {  
    return; 
    } 
    seElementInstance = seElement.CreateInstance(); 
    seElementInstance .Play(); 
} 

private void ElementLoadTextClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    isElementLoadSoundPlaying = true; 
    seLoadInstance = seLoad.CreateInstance(); 
    seLoadInstance.Play(); 
} 
0

没有使用过的声音到现在为止,但我所看到的:

为什么当你想播放声音,你总是创建新实例? 如果有人在调用“play”之前正在运行,是不是可以为“se”-elements和cust检查创建一个实例?

例如:

private var seLoadInstance; 
private var seElementInstance; 

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    seLoadInstance = seLoad.CreateInstance(); 
    seElementInstance = seElement.CreateInstance(); 

    seLoadInstance.Play(); // no need to check if something is playing... nothing will be loaded 
} 

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if(seLoadInstance.State != SoundState.Playing && seElementInstance.State != SoundState.Playing) 
    {  
     seElementInstance .Play(); 
    } 
} 
+0

感谢。我想播放要点击的元素的声音,即停止正在播放的任何声音。我不希望发生这种情况的唯一时间是首次加载页面时。正如我之前提到的,我无法按照你提到的方式使用国家。对于创建新实例,我实际上会在实例停止播放后处理它。我不确定这是一个问题还是错误的编码方式。 – oms

相关问题