首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断MediaElement是否正在播放?

如何判断MediaElement是否正在播放?
EN

Stack Overflow用户
提问于 2016-08-01 16:52:54
回答 1查看 792关注 0票数 0

我想确定我的播放器上的视频is_playing。但是怎么做呢?请帮帮我。我正在使用c#>w_pf .net Framework4.5.1,我想创建一个像这样的视频事件。

See Photo Demo

我想像那个玩家一样控制播放/暂停按钮。如何在视频播放时控制播放/暂停按钮图像的变化。请帮帮我

EN

回答 1

Stack Overflow用户

发布于 2016-08-01 22:09:48

我有两个按钮,并将这些按钮的可见性绑定到一个布尔值,当您单击按钮时,该布尔值可以控制这些按钮。

基本上,您必须自己跟踪播放暂停状态。媒体元素不会为你做到这一点。

在主窗口xaml中添加以下内容:

代码语言:javascript
运行
复制
// Two converters used with the visibility binding
<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    <local:InvertableBooleanToVisibilityConverter x:Key="InvertableBooleanToVisibilityConverter"/>
</Window.Resources> 

// Need to make sure we add loaded behaviour or it will crash app
<MediaElement Name="mePlayer" 
                  LoadedBehavior="Manual" 
                  Source="C:\Users\SamG\Downloads\ZW_20160102_064536A.avi"/>


<Button Content="Play" Name="Play" Click="Play_OnClick" Visibility="{Binding ElementName=mainWindow, Path=IsPaused, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Button Content="Pause" Name="Pause" Click="Pause_OnClick" Visibility="{Binding ElementName=mainWindow, Path=IsPaused, Converter={StaticResource InvertableBooleanToVisibilityConverter}, ConverterParameter=Inverted}"/>

您还必须为此窗口命名,确保将其放入

代码语言:javascript
运行
复制
x:Name="mainWindow"

在c#代码中:

代码语言:javascript
运行
复制
public partial class MainWindow : INotifyPropertyChanged
{
    private bool _isPaused;

    public MainWindow()
    {
        InitializeComponent();

        mePlayer.Play();
        IsPaused = true;
    }

    private void Play_OnClick(object sender, RoutedEventArgs e)
    {
        mePlayer.Play();

        IsPaused = false;
    }

    private void Pause_OnClick(object sender, RoutedEventArgs e)
    {
        mePlayer.Pause();

        IsPaused = true;
    }

    public bool IsPaused
    {
        get { return _isPaused; }
        set
        {
            _isPaused = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后添加一个名为InvertableBooleanToVisibilityConverter的新类:

代码语言:javascript
运行
复制
[ValueConversion(typeof(bool), typeof(Visibility))]
public class InvertableBooleanToVisibilityConverter : IValueConverter
{
    enum Parameters
    {
        Normal, Inverted
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var boolValue = (bool) value;
        var direction = (Parameters) Enum.Parse(typeof (Parameters), (string) parameter);

        if (direction == Parameters.Inverted)
            return !boolValue ? Visibility.Visible : Visibility.Collapsed;

        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

复制这段代码,它应该能满足你的需求

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38694624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档