【问题标题】:Binding to Media Element,绑定到媒体元素,
【发布时间】:2015-01-15 00:59:19
【问题描述】:

我正在尝试绑定到媒体元素,但我的所有尝试都失败了, 后面的代码:-

    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 时,它正在工作,但现在当我使用此代码后它不再工作时,声音根本不播放。 请问有什么帮助让它工作吗? 谢谢

【问题讨论】:

  • 首先,请将代码放在代码块中,不是图像(例如,您的第一个很难阅读)。其次,你得到了什么错误? “它不起作用”不是问题陈述。
  • 我没有收到错误绑定根本不起作用,没有声音播放。图片已删除。
  • 好的,但是你有任何System.Data 例外吗?绑定非常很少静默失败。
  • 完全没有,但我相信这可能与 URI 有关?因为当我在 xaml 中创建另一个媒体元素,然后在我的代码中,当分配了我使用当前源创建的媒体元素源时,媒体元素的声音成功播放。 :(
  • 当然可以。在代码隐藏中构建 Source Uri 比 XAML 复杂得多。不过应该是可以的。

标签: c# xaml data-binding windows-store-apps win-universal-app


【解决方案1】:

这里有几个问题。首先,MediaElement 如果不在 XAML 树中,则不会播放 - 您需要添加它。其次,您不应该立即调用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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多