Suren97 Ответов: 1

C# как воспроизвести носитель после выбора элемента в списке (WPF)


У меня есть две страницы в моем окне,на первой странице Я пишу данные для моего загруженного музыкального видео,и после нажатия на кнопку Сохранить оно сохраняется в списке, а затем добавляется в список, но в списке мне показывают только название этой песни и изображение для песни.список находится на второй странице,когда элемент уже добавляется,когда я нажимаю на любой элемент, чтобы увидеть видео этого элемента в правой части вне списка.Как я могу решить эту проблему?
Это первая страница после загрузки видео и картинки[^]
Это вторая страница, элемент уже добавлен в список[^]
Теперь мне нужно,когда я нажимаю на элемент, он должен показать мне видео этого элемента` Бейонсе - ореол в Медиаэлементе. Пожалуйста, помогите мне.

//My media class
 public class Media
    {
        public string SongName { get; set; }
        public string Album { get; set; }
        public string SingerName { get; set; }
        public Uri Medias { get; set; }
        public Uri Image { get; set; }
        public Media(string SongName, string Album, string SingerName, Uri Medias, Uri Image)
        {
            this.SongName = SongName;
            this.Album = Album;
            this.SingerName = SingerName;
            this.Medias = Medias;
            this.Image = Image;
        }
    }
//Page 1
 public partial class Page1 : Page
    {
        public Uri n;
        public Uri m;
        public Page1()
        {
            InitializeComponent();
        }
        //Button for uploading video
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            if (op.ShowDialog() == true)
            {
                mp.Source = new Uri(op.FileName);
                mp.Play();
            }
            this.m = new Uri(op.FileName);
        }
       //Button for saving datas in list
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
          Media x = new Media(txt1.Text,txt2.Text, txt3.Text,m,n);
          Page2.videos.Add(x);
        }
        //Button for uploading image
        private void Button_Click_3(object sender, RoutedEventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.Title = "Select a picture";
            op.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
              "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
              "Portable Network Graphic (*.png)|*.png";
            if (op.ShowDialog() == true)
            {
                image1.Source = new BitmapImage(new Uri(op.FileName));
            }
            this.n = new Uri(op.FileName);
        }
    }

//Page 2
public partial class Page2 : Page
    {
        static public ObservableCollection<Media> videos { get; } = new ObservableCollection<Media>();
//This shows items in ListBox` Name and Image
        public Page2()
        {
            InitializeComponent();
            foreach (Media item in Page2.videos)
            {
                lb.ItemsSource = videos;
            }
        }
//This is my problem, Video doesn't play when i click on item
        private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            foreach (Media items in Page2.videos)
            {
                if (lb.SelectedItem != null)
                {
                    m_element = items.Medias;
                    m_element.Play();
                }
            }
        }
    }


Что я уже пробовал:

// Page 2 XAML

<Page x:Class="Suren_MaterialDesign.Page2"
      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:Suren_MaterialDesign"
      mc:Ignorable="d" 
      d:DesignHeight="515" d:DesignWidth="1010"
      Title="Page2">
    <Page.Resources>
        <DataTemplate x:Key="Songs">
            <StackPanel Height="110" Width="310">
                <WrapPanel HorizontalAlignment="Center">
                    <Label VerticalAlignment="Center" HorizontalAlignment="Center"  Content="{Binding Path=SongName}"/>
                </WrapPanel>
                <Image Source="{Binding Path=Image}" Width="200" Height="100"/>
            </StackPanel>
        </DataTemplate>
    </Page.Resources>

    <Grid Background="#FF35A69C">
        <GroupBox Background="White" Header="My Songs" FontSize="20" Height="460" Width="425" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,20,0,0">
            <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" Name="lb" Width="425" ItemTemplate="{StaticResource Songs}" Margin="0,-15,0,-8">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
            </ListBox>
        </GroupBox>
        <MediaElement Source="{Binding Path=Medias}" x:Name="m_element" Height="400" Width="400" HorizontalAlignment="Right" Margin="30"/>
    </Grid>
</Page>

1 Ответов

Рейтинг:
1

Graeme_Grant

//Page 2
public partial class Page2 : Page
{
    //This is my problem, Video doesn't play when i click on item
    private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        foreach (Media items in Page2.videos)
        {
            if (lb.SelectedItem != null)
            {
                m_element = items.Medias;
                m_element.Play();
            }
        }
    }
}

<MediaElement Source="{Binding Path=Medias}" x:Name="m_element" Height="400" Width="400" HorizontalAlignment="Right" Margin="30"/>

Цитата:
Теперь мне нужно,когда я нажимаю на элемент, он должен показать мне видео этого элемента` Бейонсе - ореол в Медиаэлементе.

У вас есть MediaElement названный m_element инициализируется в XAML с помощью привязки данных к несуществующей коллекции, называемой Medias в вашем коде позади. Затем вы указываете XAML MediaElement объект для unititialized MediaElement В вашем Media класс. Вам нужно только добавить MediaURL собственность на землю Media класс и точка точка m_element.Source собственность у него.

Кроме того, в lb_SelectionChanged метод события, который вы ищете для Media класс в центре города Videos коллекция. То lb.SelectedItem уже указывает на то, что Media класс, так что нет никакой необходимости его искать.

Вы можете узнать больше здесь: WPF Tutorial - воспроизведение видео[^] (http://www.wpf-tutorial.com/audio-video/playing-video/)


Maciej Los

Ястребиный глаз!

Graeme_Grant

Спасибо! :)

Suren97

Ты имеешь в виду, а не метод MediaElement СМИ { получить; набор; }, мне нужно написать публичное MediaURL СМИ { получить; набор; }???

Graeme_Grant

да... не передавайте управление, просто URL (путь) к файлу, который будет воспроизводиться.

Suren97

но я не знаю постоянного URL видео, я не понимаю, что вы имеете в виду :(

Graeme_Grant

Как и URL-адрес изображения, Музыка/Видео будет иметь URL-адрес файла...

Suren97

Слушай, я обновил свой вопрос, Ты имеешь в виду вот так?

Suren97

Я думаю, что проблема заключается в событии SelectionChanged, что я должен там изменить?

Suren97

И MediaElement я дал Source="{Binding Path=Medias}", это неправильно?

Graeme_Grant

Проверьте ссылку, приведенную в ответе. Это показывает вам, как именно.