Я использую 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;
}
}
}
Пожалуйста, помогите мне с этой проблемой. Он получил меня на несколько дней. Спасибо!