这是我的问题,我试图只显示我想要播放的文件的名称,但是当我这样做时,我的播放列表只是跳过这首歌并且实际上没有播放它。我不知道它为什么要这样做。所以我的问题是,如何才能显示歌曲名称以便实际播放?
的Xaml:
<Window x:Class="MusicalCloud.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Musical Cloud" Height="400" Width="600">
<Window.Resources>
<Image x:Key="Play" Source="Images/play.png" />
<Image x:Key="Pause" Source="Images/pause.png" />
<Image x:Key="Muted" Source="Images/volume_0.png" />
<Image x:Key="Low" Source="Images/volume_low.png" />
<Image x:Key="High" Source="Images/volume_high.png" />
</Window.Resources>
<DockPanel>
<Grid Background="DarkGray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="35*" />
<ColumnDefinition Width="65*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="85*" />
<RowDefinition Height="15*" />
</Grid.RowDefinitions>
<StackPanel x:Name="musicFinder"
Grid.Row="0"
Grid.Column="0">
<ListBox x:Name="playlist"
ItemsSource="{Binding Path=FileList}"
SelectedItem="{Binding Path=SelectedMedia}">
</ListBox>
</StackPanel>
<MediaElement x:Name="mediaPlayer"
Margin="3"
Grid.Row="0"
Grid.Column="1"
LoadedBehavior="Manual"
MediaEnded="Player_MediaEnded"
MediaOpened="Player_MediaOpened"
MediaFailed="Player_MediaEnded"
Source="{Binding CurrentMedia}">
</MediaElement>
<Grid x:Name="mediaControls"
Grid.Row="1"
Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*" />
<ColumnDefinition Width="25*" />
<ColumnDefinition Width="25*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20*" />
</Grid.RowDefinitions>
<Button x:Name="playPauseButton"
Margin="3"
Grid.Column="1"
Click="PlayPause">
<DynamicResource ResourceKey="Play" />
</Button>
</Grid>
</Grid>
</DockPanel>
代码背后:
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
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;
using System.Windows.Threading;
namespace MusicalCloud
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
DispatcherTimer timer;
public delegate void timerTick();
timerTick tick;
string sec, min, hours;
string[] result;
private bool mediaPlayerIsPlaying = false;
private bool userIsDraggingSlider = false;
public ObservableCollection<string> FileList { get; set; }
public MainWindow()
{
InitializeComponent();
GetFiles(@"C:\Users\Donald Rohlman\Dropbox\Music");
this.DataContext = this;
}
private void GetFiles(string folderPath)
{
string[] files = Directory.GetFiles(folderPath).Select(path => System.IO.Path.GetFileName(path)).ToArray();
FileList = new ObservableCollection<string>(files);
}
private void PlayPause(object sender, RoutedEventArgs e)
{
if (playPauseButton.Content == FindResource("Play"))
{
mediaPlayer.Play();
mediaPlayerIsPlaying = true;
playPauseButton.Content = FindResource("Pause");
}
else
{
mediaPlayer.Pause();
mediaPlayerIsPlaying = false;
playPauseButton.Content = FindResource("Play");
}
}
private void Player_MediaEnded(object sender, EventArgs e)
{
int currentSongIndex = FileList.IndexOf(SelectedMedia);
currentSongIndex++;
if (currentSongIndex < FileList.Count)
{
SelectedMedia = FileList[currentSongIndex] as string;
Play();
}
else
{
CurrentMedia = null;
}
}
private void Player_MediaOpened(object sender, RoutedEventArgs e)
{
mediaPlayerIsPlaying = true;
}
void Play(string media = null)
{
mediaPlayer.Stop();
mediaPlayerIsPlaying = false;
CurrentMedia = media ?? SelectedMedia;
PlayPause(null, null);
}
public string CurrentMedia
{
get { return (string)GetValue(CurrentMediaProperty); }
set { SetValue(CurrentMediaProperty, value); }
}
// Using a DependencyProperty as the backing store for CurrentMedia. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CurrentMediaProperty =
DependencyProperty.Register("CurrentMedia", typeof(string), typeof(MainWindow), new PropertyMetadata(null));
public string SelectedMedia
{
get { return (string)GetValue(SelectedMediaProperty); }
set { SetValue(SelectedMediaProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedMedia. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedMediaProperty =
DependencyProperty.Register("SelectedMedia", typeof(string), typeof(MainWindow), new PropertyMetadata(null, (s, e) => (s as MainWindow).Play()));
}
}