Как связать MediaPlayerElement и ComboBox - PullRequest
1 голос
/ 10 апреля 2019

Я занят проектом, в котором пользователь может импортировать мультимедийные файлы в ComboBox и выбирать мультимедийный файл для воспроизведения. Я могу выбрать элемент, но он не загружает его в MediaPlayerElement для воспроизведения. Я уверен, что это связано с моим ComboBox «SelectionChanged», но я не знаю, как это реализовать.

КОД XAML

<Grid>
    <Button x:Name="loadbtn" Content="Button" HorizontalAlignment="Left" Margin="92,186,0,0" VerticalAlignment="Top" Height="87" Width="658" Click="Loadbtn_Click"/>
    <ComboBox IsTextSearchEnabled="True" x:Name="comboBox" Header="Media Library" Height="129" Width="658" HorizontalAlignment="Left" Margin="92,324,0,0" VerticalAlignment="Top" IsDropDownOpen="True" SelectionChanged="ComboBox_SelectionChanged"/>
    <MediaPlayerElement x:Name="mediaPlayerElement"  Width="658" Height="129" AutoPlay="True" AreTransportControlsEnabled="True" Margin="92,473,0,0" FocusVisualSecondaryBrush="White" FocusVisualPrimaryBrush="White" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Grid>

КОД XAML.CS

public sealed partial class MainPage : Page
{
    MediaPlayerElement mediaP = new MediaPlayerElement();

    public MainPage()
    {
        this.InitializeComponent();
    }

    public List<string> filePath = new List<string>();
    public List<string> fileName = new List<string>();

    public async void MpPlayer()
    {
        var picker = new Windows.Storage.Pickers.FileOpenPicker();
        picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
        picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
        picker.FileTypeFilter.Add(".mp3");
        picker.FileTypeFilter.Add(".wav");
        picker.FileTypeFilter.Add(".mp4");

        var files = await picker.PickMultipleFilesAsync();
        if (files.Count > 0)
        {
            StringBuilder output = new StringBuilder("Picked files:\n");

            // Application now has read/write access to the picked file(s)
            foreach (Windows.Storage.StorageFile file in files)
            {
                output.Append(file.Name + "\n");
            }
            this.textBlock.Text = output.ToString();

        }
        else
        {
            this.textBlock.Text = "Operation cancelled.";
        }

        foreach (StorageFile file in files)
        {
            filePath.Add(file.Path.ToString());
            fileName.Add(file.Name.ToString());
            comboBox.Items.Add(file.Name.ToString());
        }
    }

    private void Loadbtn_Click(object sender, RoutedEventArgs e)
    {
        MpPlayer();
    }

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

    }
}

1 Ответ

0 голосов
/ 11 апреля 2019

По вашему требованию вы можете создать MediaItem класс модели для сохранения выбранного файла и передать коллекцию MediaItem в источник данных comboBox.

MediaItem

public class MediaItem
{
    public string FileName { get; set; }
    public StorageFile File { get; set; }
}

Xaml

<Grid>
    <Button
        x:Name="loadbtn"
        Width="658"
        Height="87"
        Margin="92,186,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        Click="Loadbtn_Click"
        Content="Button"
        />
    <ComboBox
        x:Name="comboBox"
        Width="658"
        Height="129"
        Margin="92,324,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        DisplayMemberPath="FileName"
        Header="Media Library"
        IsDropDownOpen="True"
        IsTextSearchEnabled="True"  
        SelectionChanged="ComboBox_SelectionChanged"
        />
    <MediaPlayerElement
        x:Name="mediaPlayerElement"
        Width="658"
        Height="129"
        Margin="92,473,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        AreTransportControlsEnabled="True"
        AutoPlay="True"
        FocusVisualPrimaryBrush="White"
        FocusVisualSecondaryBrush="White"
        />
</Grid>

Код позади

private async void Loadbtn_Click(object sender, RoutedEventArgs e)
{
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
    picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
    picker.FileTypeFilter.Add(".mp3");
    picker.FileTypeFilter.Add(".wav");
    picker.FileTypeFilter.Add(".mp4");

    var files = await picker.PickMultipleFilesAsync();
    if (files.Count > 0)
    {

        foreach (StorageFile file in files)
        {
            var item = new MediaItem { File = file, FileName = file.Name };
            comboBox.Items.Add(item);
        }

    }
    else
    {
        throw new Exception("Operation cancelled");
    }
}

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var mediaitem = comboBox.SelectedItem as MediaItem;
    mediaPlayerElement.MediaPlayer.SetFileSource(mediaitem.File);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...