Soru & Cevap

MediaElement'e Seekbar nasıl eklerim ...

23.09.2014 - 02:26

Merhaba arkadaşlar ben windows phone 8 üzerinde media uygulaması geliştirmekteyim. MediaElement üzerinde kontroller bulunmadığı için oynattığım medyayı ileri alamıyorum. Bunu kendi içinde olan MediaPlayerLauncher ile yapabiliyorum, fakat MediaElement üzerinde olmuyor. Kendim Slider ekleyip birşeyler yapmaya çalıştım sadece ileri ve geri atlamayı yapabildim ama video oynadıkca Slider'ın ilerlemesini yapamadım yardımcı olursanız sevinirim.

Bu benim Playerım:
Görsel kaldırıldı.

 

Buda istediğim şekilde olan MediaPlayerLauncher:
Görsel kaldırıldı.


Bunlarda kodlarım


Xaml:
[code]
<Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <MediaElement x:Name="player1" MediaOpened="player1_MediaOpened" CurrentStateChanged="player1_CurrentStateChanged" /> <ListBox x:Name="alternatifliste" FontSize="20" FontStyle="Italic" FontWeight="Bold" Foreground="White" Margin="677,98,10,153" SelectionChanged="alternatifliste_SelectionChanged" /> </Grid> <Button x:Name="play" Content="play" HorizontalAlignment="Left" Margin="94,336,0,0" Grid.Row="1" VerticalAlignment="Top" Click="play_Click"/> <Button x:Name="stop" Content="stop" HorizontalAlignment="Left" Margin="331,336,0,0" Grid.Row="1" VerticalAlignment="Top" Click="stop_Click"/> <Slider Name="timelineSlider" Margin="0,68,0,244" Grid.Row="1" ValueChanged="timelineSlider_ValueChanged" /> </Grid>
[/code]

 

Cs:


[code]private void player1_MediaOpened(object sender, RoutedEventArgs e)

{ TimeSpan ts = player1.NaturalDuration.TimeSpan; timelineSlider.Maximum = ts.TotalSeconds; timelineSlider.SmallChange = 1; timelineSlider.LargeChange = Math.Min(10, ts.Seconds / 10); }

private void seekBar_DragCompleted(object sender, DragCompletedEventArgs e)

{

player1.Position = TimeSpan.FromSeconds(timelineSlider.Value);

}

private void timelineSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)

{

player1.Position = TimeSpan.FromSeconds(timelineSlider.Value);

} private void player1_CurrentStateChanged(object sender, RoutedEventArgs e)

{

Yapmaya çalışıp yapamadığım bölüm(medya oynadıkça sliderın hareket etmesi)

//timelineSlider.Value = player1.Position.Seconds;

}
[/code]

11 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-19735-1411940578.png
mk148a
29.09.2014 - 12:40

Kendi soruma kendim cevap vereyim diğer arkadaşlarda faydalansın, bunlar xaml kodları,slider için tasarım kullandım ayrıntılı bilgi burda:http://stackoverflow.com/questions/25915811/how-to-add-mediaelement-seek-bar/25926077#25926077

 

[code] <MediaElement x:Name="player1" MediaOpened="player1_MediaOpened" CurrentStateChanged="player1_CurrentStateChanged_1" />

            <Canvas x:Name="playercontrolcanvas" Margin="0,327,0,0" >
                <Canvas.Background>
                    <SolidColorBrush Color="#FF4B4B4B" Opacity="0.03"/>
                </Canvas.Background>
               

                <Slider x:Name="timelineSlider" Style="{StaticResource Chubs_SliderStyle}" VerticalAlignment="Bottom" ManipulationCompleted="timelineSlider_ManipulationCompleted" Width="800" Canvas.Top="80" >
                    <Slider.Background>
                        <SolidColorBrush Color="#FF1F1F1F" Opacity="0.5"/>
                    </Slider.Background>
                </Slider>
                <TextBlock x:Name="time" Grid.Row="1" TextWrapping="Wrap" Text="00:00" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="37" Canvas.Top="121">
                    <TextBlock.Foreground>
                        <SolidColorBrush Color="White" Opacity="0.5"/>
                    </TextBlock.Foreground>
                </TextBlock>

            </Canvas>[/code]

 

[code]

 private void player1_MediaOpened(object sender, RoutedEventArgs e)
        {
            TimeSpan ts = player1.NaturalDuration.TimeSpan;
            timelineSlider.Maximum = ts.TotalSeconds;
            timelineSlider.SmallChange = 1;
            timelineSlider.LargeChange = Math.Min(10, ts.Seconds / 10);
            SetupTimer();
        }
        private void seekBar_DragCompleted(object sender, DragCompletedEventArgs e)
        {
            player1.Position = TimeSpan.FromSeconds(timelineSlider.Value);
        }

          
        private DispatcherTimer _timer;

        private void SetupTimer()
        {
            _timer = new DispatcherTimer();
            _timer.Interval = TimeSpan.FromSeconds(0.250);
            StartTimer();
        }
        private bool _sliderpressed = false;
        private void _timer_Tick(object sender, object e)
        {
            if (!_sliderpressed)
            {
                timelineSlider.Value = player1.Position.TotalSeconds;
                TimeSpan t = TimeSpan.FromSeconds(player1.Position.TotalSeconds);
                string suankisure = string.Format("{0:D2}:{1:D2}:{2:D2}",
                t.Hours,
                t.Minutes,
                t.Seconds);
                TimeSpan nd = TimeSpan.FromSeconds(player1.NaturalDuration.TimeSpan.TotalSeconds);
                string toplamsure = string.Format("{0:D2}:{1:D2}:{2:D2}",
                nd.Hours,
                nd.Minutes,
                nd.Seconds);

                time.Text = suankisure + "/" + toplamsure;
            }
        }

        private void StartTimer()
        {
            _timer.Tick += _timer_Tick;
            _timer.Start();
        }

        private void StopTimer()
        {
            _timer.Stop();
            _timer.Tick -= _timer_Tick;
        }

    
          
     

        private void timelineSlider_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
        {
            player1.Position = TimeSpan.FromSeconds(timelineSlider.Value);          
        }
        
        private void player1_CurrentStateChanged_1(object sender, RoutedEventArgs e)
        {
           
            if (player1.CurrentState == MediaElementState.Playing)
            {
                if (_sliderpressed)
                {
                    _timer.Stop();
                }
                else
                {
                    _timer.Start();
                }
            }
            else if(player1.CurrentState == MediaElementState.Paused)
            {
                _timer.Stop();
            }
            else if (player1.CurrentState == MediaElementState.Stopped)
            {
                _timer.Stop();
            }
            else if (player1.CurrentState == MediaElementState.Closed)
            {
                _timer.Stop();
            }
        }

[/code]

 

Buda görüntüsü:
Görsel kaldırıldı.