2015-01-15 94 views
0

我試圖綁定到媒體元素和我所有的嘗試失敗了, 後面的代碼: -綁定到媒體元素,

private void myg_ItemClick(object sender, ItemClickEventArgs e) 
    { 
     string str = ((EgyGuide.Models.Arabic)e.ClickedItem).Sound; 
     MediaElement m1 = new MediaElement(); 
     m1.Source = new System.Uri("ms-appx:///" + str); 
     m1.Play(); 
    } 

XAML: -

   <GridView x:Name="myg" 
         IsItemClickEnabled="True" 
         ItemClick="myg_ItemClick"> 
       <GridView.ItemTemplate> 
        <DataTemplate> 
         <Grid> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding English}" 
              FontSize="22" /> 
           <TextBlock Text="{Binding Arabia}" 
              FontSize="22" /> 
          </StackPanel> 
         </Grid> 
        </DataTemplate> 
       </GridView.ItemTemplate> 
      </GridView> 

當我創造源直接到我的XAML它正在工作,但現在當我使用它後面的代碼不工作了,聲音根本不起作用。 請幫忙解決這個問題嗎? 謝謝

+0

首先,請把代碼中的代碼塊,*不*圖像(例如,你的第一個是非常難以閱讀)。其次,你有什麼錯誤? 「它不起作用」不是問題陳述。 – BradleyDotNET

+0

我沒有收到錯誤,綁定完全不起作用,沒有聲音播放。已刪除 圖片。 –

+0

好的,但是你會得到任何'System.Data'異常嗎?綁定非常*很少*失敗失敗。 – BradleyDotNET

回答

3

這裏有幾個問題。首先,如果它不在XAML樹中,則不會播放MediaElement - 您需要添加它。其次,您不應該立即致電Play,而應該等待MediaOpened事件發生。事情是這樣的:

代碼:

MediaElement me; 

private void StartButtonClicked(object sender, RoutedEventArgs e) 
{ 
    me = new MediaElement(); 

    // Register for critical events. CurrentStateChanged is also useful 
    me.MediaOpened += MediaElementMediaOpened; 
    me.MediaFailed += MediaElementMediaFailed; 

    // Start opening the file 
    me.Source = new Uri("ms-appx:///Assets/WestEndGirls.wma"); 

    // Add to the XAML tree (assumes a Panel with the name "Root") 
    Root.Children.Add(me); 
} 

// Errors will be reported here 
void MediaElementMediaFailed(object sender, ExceptionRoutedEventArgs e) 
{ 
    Debug.WriteLine(e.ErrorMessage); 
} 

// Only once the media has been opened can you play it 
void MediaElementMediaOpened(object sender, RoutedEventArgs e) 
{ 
    me.Play(); 
} 

XAML:

<StackPanel x:Name="Root"> 
    <Button Content="Start" Click="StartButtonClicked" /> 
</StackPanel>