WPF - Usando ListBox com Vídeos (MediaElement)


  Neste artigo vou mostrar como podemos usar os recursos do controle ListBox para exibir itens com conteúdo de vídeos usando o controle MediaElement.
 

Chegou o curso Curso ASP .NET .MVC 5 Vídeo Aulas onde você vai aprender a criar aplicações web dinâmicas usando a ASP .NET MVC 5.

Eu já tratei dos componentes ListBox e MediaElement em meus artigos (veja as referências) e hoje vou mostrar como podemos incluir elementos com vídeos usando o componente MediaElement em um controle ListBox da WPF.

O controle ListBox da WPF é diferente do controle ListBox Windows Forms e possui muitas habilidades que podem ser estendidas.

A tag <ListBox></ListBox> representa um controle ListBox no XAML e possui diversas propriedades que podemos configurar :

<ListBox Margin="10,10,0,13" Name="listBox1" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="194" Height="200" />

Um controle ListBox possui uma coleção de de ListBoxItem que representam os itens selecionáveis em um controle ListBox.

A classe MediaElement representa um controle que contém áudio e/ou vídeo e pode ser usado em dois modos distintos, dependendo de como o controle esta direcionado: 

Vamos juntar os dois componentes e inserir elementos MediaElement em um ListBox usando o ListBoxItem de forma que teremos uma lista de vídeos exibidas no ListBox que quando selecionados pelo usuário irá exibir o vídeo correspondente.

Recursos usados:

Criando o projeto WPF no Visual Studio 2013 Express

Abra o Visual Studio 2013 Express for windows desktop e crie um novo projeto selecionando o template Visual Basic -> Wpf Application;

Informe o nome Wpf_ListBox_Videos e clique no botão OK;

Nota: Você pode criar um projeto usando a linguagem C#

A seguir no arquivo MainWindow.xaml defina as propriedades da janela (Window) Height igual a 650 e Width igual a 1000.

<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Vídeos com ListBox" Height="650" Width
="1000">

A seguir a partir da ToolBox inclua os componentes ListBox e MediaElement na janela no interior do controle Grid.

<Grid>
<ListBox HorizontalAlignment="Left" VerticalAlignment="Top"
		Margin="27,41.5,0,0"
		Name="lbVideos"
		BorderThickness="2"
		FontFamily="Verdana"	
		FontSize="12"
		FontWeight="Bold"
		Width="250"
		Height="233">
</ListBox>
<MediaElement Margin="336,43,53,217" Name="mediaElement1" />
</Grid>

Vamos aplicar um estilo criando um recurso no arquivo Application.xaml conforme o código abaixo destacado em azul:

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <LinearGradientBrush x:Key="brushGrid" StartPoint="0.1, 0.6" EndPoint="0.8, 1">
            <GradientStop Color="AliceBlue" Offset="0.4"/>
            <GradientStop Color="Azure" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="brushListBox" StartPoint="0.1, 0.6" EndPoint="0.8, 1">
            <GradientStop Color="Honeydew" Offset="0.4"/>
            <GradientStop Color= "Goldenrod" Offset="1"/>
        </LinearGradientBrush>
    </Application.Resources>
</Application>

A seguir vamos aplicar o estilo no Grid e no ListBox do arquivo MainWindow.xaml:

  <Grid Background="{StaticResource brushGrid}">
    <
ListBox Background="{StaticResource brushListBox}"
       ....

Agora vamos exibir no controle ListBox um vídeo e o seu nome para cada item do controle.

Para fazer isso vamos colocar um controle StackPanel em cada item do ListBox o qual será usado para conter o vídeo e o Texto.

Para exibir o vídeo vamos usar o componente MediaElement e para exibir o texto um controle TextBlock. Tudo isso no interior do ListBoxItem.

...
<ListBoxItem Name="lbivid1" BorderThickness="2" Selected="lbivid_Selected" >
   <StackPanel Orientation="Horizontal">
   </StackPanel>
</ListBoxItem>
...

Note que definimos o evento Selected no ListBoxItem. Esse evento será tratado quando o usuário clicar em um item para selecionar o vídeo.

No interior do StackPanel iremos incluir o MediaElement e o TextBlock:

...
<ListBoxItem Name="lbivid1" BorderThickness="2" Selected="lbivid_Selected" >
   <StackPanel Orientation="Horizontal">
      <MediaElement Name="vid1" Source="C:\dados\Video1.wmv" Volume="0" Height="50"></MediaElement>
       <TextBlock Text="Earth" HorizontalAlignment="Center" Foreground="Maroon" 
                  FontFamily="Monotype Corsiva" 
                  FontSize="20" 
                  VerticalAlignment="Center" >
      </TextBlock>
   </StackPanel>
</ListBoxItem>
...

Observe definimos a propriedade Volume igual a zero e o tamanho Height igual a 50, assim exibimos uma miniatura sem som no controle ListBox.

Você pode inserir tantos itens para tantos vídeos que desejar exibir no controle ListBox.

A seguir inclua um controle Label abaixo do controle ListBox e defina sua propriedade Content com o texto : Clique no Vídeo para Assistir

Abaixo vemos o leiaute do arquivo MainWindow.xaml :

Código XAML gerado:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Vídeos com ListBox" Height="650" Width="1000">
    <Grid Background="{StaticResource brushGrid}">
        <ListBox Background="{StaticResource brushListBox}"
                  HorizontalAlignment="Left"
                  VerticalAlignment="Top"
                  Margin="27,42,0,0"
                  Name="lbVideos"
                  BorderThickness="2"
                  FontFamily="Verdana"
                  FontSize="12"
                  FontWeight="Bold"
                  Width="250"
                  Height="270">
            <ListBoxItem Name="lbivid1" BorderThickness="2" Selected="lbivid_Selected" >
                <StackPanel Orientation="Horizontal">
                    <MediaElement Name="vid1" Source="C:\Dados\Videos\Video1.wmv" Volume="0" Height="50" ></MediaElement>
                    <TextBlock Text="Aula Visual Basic" HorizontalAlignment="Center" Foreground="Maroon" FontFamily="Monotype Corsiva" FontSize="20" VerticalAlignment="Center" >
                    </TextBlock>
                </StackPanel>
            </ListBoxItem>
            <ListBoxItem Name="lbivid2" BorderThickness="2" Selected="lbivid_Selected" >
                <StackPanel Orientation="Horizontal">
                    <MediaElement Name="vid2" Source="C:\Dados\Videos\Video1.wmv" Volume="0" Height="50" ></MediaElement>
                    <TextBlock Text="Aula Visual Basic" HorizontalAlignment="Center" Foreground="Maroon" FontFamily="Monotype Corsiva" FontSize="20" VerticalAlignment="Center" >
                    </TextBlock>
                </StackPanel>
            </ListBoxItem>
            <ListBoxItem Name="lbivid3" BorderThickness="2" Selected="lbivid_Selected" >
                <StackPanel Orientation="Horizontal">
                    <MediaElement Name="vid3" Source="C:\Dados\Videos\Video1.wmv" Volume="0" Height="50" ></MediaElement>
                    <TextBlock Text="Aula Visual Basic" HorizontalAlignment="Center" Foreground="Maroon" FontFamily="Monotype Corsiva" FontSize="20" VerticalAlignment="Center" >
                    </TextBlock>
                </StackPanel>
            </ListBoxItem>
            <ListBoxItem Name="lbivid4" BorderThickness="2" Selected="lbivid_Selected" >
                <StackPanel Orientation="Horizontal">
                    <MediaElement Name="vid4" Source="C:\Dados\Videos\Video1.wmv" Volume="0" Height="50" ></MediaElement>
                    <TextBlock Text="Aula Visual Basic" HorizontalAlignment="Center" Foreground="Maroon" FontFamily="Monotype Corsiva" FontSize="20" VerticalAlignment="Center" >
                    </TextBlock>
                </StackPanel>
            </ListBoxItem>
        </ListBox>
        <MediaElement Margin="308,42,38,25" Name="mediaElement1" />
        <Label Content="Clique no  Vídeo para Assistir" HorizontalAlignment="Left" Margin="30,312,0,0" VerticalAlignment="Top" Height="25" Width="247" FontWeight="Bold" FontSize="14"/>
    </Grid>
</Window>

Para concluir vamos definir o código do evento Selected do ListBoxItem no arquivo MainWindow.xaml.vb de forma que quando o usuário clicar em um item o respectivo vídeo associado seja executado.

VB .NET C#
   Private Sub lbivid_Selected(sender As Object, e As RoutedEventArgs)
        Dim lbi As New ListBoxItem()
        lbi = DirectCast(sender, ListBoxItem)
        Select Case lbi.Name
            Case "lbivid1"
                mediaElement1.Source = vid1.Source
                Exit Select
            Case "lbivid2"
                mediaElement1.Source = vid2.Source
                Exit Select
            Case "lbivid3"
                mediaElement1.Source = vid3.Source
                Exit Select
            Case "lbivid4"
                mediaElement1.Source = vid4.Source
                Exit Select
        End Select
    End Sub
private void lbivid_Selected(object sender, RoutedEventArgs e)
{
    ListBoxItem lbi = new ListBoxItem();
           lbi = (ListBoxItem)sender;
           switch(lbi.Name)
          {
              case "lbivid1":
                     mediaElement1.Source = vid1.Source;
                     break;
              case "lbivid2":
                      mediaElement1.Source = vid2.Source;
                      break;
              case "lbivid3":
                      mediaElement1.Source = vid3.Source;
                      break;
               case "lbivid4":
                      mediaElement1.Source = vid4.Source;
                     break;
             }
}

Executando o projeto iremos obter o seguinte resultado:

Após executar e selecionar um item do ListBox o vídeo será exibido ao lado no controle MediaElement.

Pegue o projeto completo aqui:  Wpf_ListBox_Videos.zip

E esta é a mensagem que dele ouvimos, e vos anunciamos: que Deus é luz, e não há nele trevas nenhumas.
Se dissermos que temos comunhão com ele, e andarmos em trevas, mentimos, e não praticamos a verdade

1 João 1:5,6

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti