Невозможно управлять MediaElement, когда LoadedBehavior установлен вручную - PullRequest
1 голос
/ 22 марта 2020

Я использую VS2019. Я хочу управлять mediaelement игроком в UserControl. Например, когда я нажимаю внизу «Play», он показывает местное видео. Таким образом, проблема заключается в том, что, когда LoadedBehavior установлено Manual, при нажатии кнопки воспроизведения ничего не происходит. Но когда я меняю состояние на Play, проигрыватель воспроизводит видео успешно и автоматически. Вот мой код XMAL, включая MediaElement, четыре Button и два Slider.

<UserControl x:Class="DictionaryPinApp.UserControlHome"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:DictionaryPinApp"
             mc:Ignorable="d" 
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
             d:DesignHeight="450" Width="auto">
    <Grid>

            <StackPanel>
            <MediaElement x:Name="Media"  Margin="100" Width="300" Height="200" VerticalAlignment="Center"  LoadedBehavior="Manual" UnloadedBehavior="Stop" Stretch="Fill" MediaOpened="Element_MediaOpened" MediaEnded="Element_MediaEnded" />
                    <StackPanel Width="450" HorizontalAlignment="Center"  Orientation="Horizontal">
                    <Button MouseDown="OnMouseDown_Play" Margin="140 -120 0 0" Width="30" Height="30" Style="{StaticResource MaterialDesignIconButton}" Foreground="#FF472076" ToolTip="Play">
                            <materialDesign:PackIcon Kind="Play" />
                        </Button>

                    <Button MouseDown="OnMouseDown_Pause" Margin="5 -120 0 0" Width="30" Height="30" Style="{StaticResource MaterialDesignIconButton}" Foreground="#FF472076" ToolTip="Pause">
                        <materialDesign:PackIcon Kind="Pause" />
                    </Button>
                    <Button MouseDown="OnMouseDown_Stop" Margin="5 -120 0 0" Width="30" Height="30" Style="{StaticResource MaterialDesignIconButton}" Foreground="#FF472076" ToolTip="Stop">
                        <materialDesign:PackIcon Kind="Stop" />
                    </Button>
                    <Button  Margin="5 -120 0 0" Width="30" Height="30" Style="{StaticResource MaterialDesignIconButton}" Foreground="#FF472076" ToolTip="Volume">
                        <materialDesign:PackIcon Kind="VolumeMedium" />
                    </Button>
                    <Slider x:Name="VolumeSlider" ValueChanged="ChangeMediaVolume" Margin="-10 -105 0 0" Value="50" Width="70" Foreground="#FF472076" Minimum="0" Maximum="100" Style="{StaticResource MaterialDesignDiscreteSlider}" />
                    <Slider x:Name="TimelineSlider" ValueChanged="SeekToMediaPosition" Margin="-260 -95 0 0" Value="0" Width="300" Foreground="#FF472076"/>
                </StackPanel>

            </StackPanel>
     <!--  </materialDesign:TransitioningContent> -->
    </Grid>
</UserControl>

Вот мой c# код. Я использую абсолютный источник URI.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace DictionaryPinApp
{
    /// <summary>
    /// UserControlHome.xaml
    /// </summary>
    public partial class UserControlHome : UserControl
    {
        public UserControlHome()
        {
            InitializeComponent();

            Media.Source = new Uri(@"f:\GraduationProject\fullver.mp4", UriKind.Absolute);

        }

        private void Element_MediaOpened(object sender, EventArgs e)
        {
            TimelineSlider.Maximum = Media.NaturalDuration.TimeSpan.TotalMilliseconds;
        }


        private void Element_MediaEnded(object sender, EventArgs e)
        {
            Media.Stop();
        }


        void OnMouseDown_Play(object sender, MouseButtonEventArgs args)
        {

            Media.Play();
            InitializePropertyValues();
        }

        void OnMouseDown_Pause(object sender, MouseButtonEventArgs args)
        {
            Media.Pause();
        }

        void OnMouseDown_Stop(object sender, MouseButtonEventArgs args)
        {
            Media.Stop();
        }

        private void ChangeMediaVolume(object sender, RoutedPropertyChangedEventArgs<double> args)
        {
            Media.Volume = (double)VolumeSlider.Value;
        }

        private void SeekToMediaPosition(object sender, RoutedPropertyChangedEventArgs<double> args)
        {
            int SliderValue = (int)TimelineSlider.Value;           
            Media.Position = ts;

        }


        private void InitializePropertyValues()
        {            
            Media.Volume = (double)VolumeSlider.Value;
        }
    }
}

Пожалуйста, помогите мне с этой проблемой. Он получил меня на несколько дней. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...