Silverlight 2 Controls Review - ProgressBar

ProgressBar 컨트롤은 현재 프로그램의 로드되는 상태를 나타내며, 그림이나 동영상같은 멀티미디어 파일을 다운로드 또는 업로드 하는 현재 상태를 퍼센트로 보여줄 수 있습니다.

아래 예제는 동영상을 다운로드 하면서 진행상태를 보여주고 동영상을 재생을 재생을 합니다.

사용자 삽입 이미지


MediaElement, TextBlack, ProgressBar 컨트롤을 Xaml 코드뷰에서 추가해주거나 Blend에서 추가해줍니다. MediaElement는 다운로드한 동영상을 재생하고 TextBlack는 다운로드 되는 상태를 퍼센트로 보여줍니다.

Xaml

<UserControl x:Class="ControlTest17.Page"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Width="290" Height="260">

    <Grid x:Name="LayoutRoot" Background="White">

       <ProgressBar Margin="32,0,105,31" x:Name="pgsLoad" Minimum="0"

                    VerticalAlignment="Bottom" Height="19"/>

       <TextBlock Height="19" HorizontalAlignment="Right" Margin="0,0,-8,31"

                  VerticalAlignment="Bottom" Width="97" Text="TextBlock"

                  TextWrapping="Wrap" x:Name="tbResult"/>

       <MediaElement Margin="30,20.5,25,66.5" x:Name="mediaElement" AutoPlay="True"/>

    </Grid>

</UserControl>


C# Code

using System;

using System.Net;

using System.Windows.Controls;

 

namespace ControlTest17

{

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

 

            WebClient webclient = new WebClient();

 

            webclient.OpenReadAsync(new Uri("Silverlight.wmv",

UriKind.RelativeOrAbsolute));

            webclient.DownloadProgressChanged += new

                DownloadProgressChangedEventHandler(webclient_DownloadProgressChanged);

            webclient.OpenReadCompleted +=

                new OpenReadCompletedEventHandler(webclient_OpenReadCompleted);

        }

 

        void webclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

        {

            if (e.Error == null)

            {

                try

                {

                    mediaElement.SetSource(e.Result);

                    mediaElement.Play();

                }

                catch (Exception ex) {}

            }

        }

 

        void webclient_DownloadProgressChanged(object sender,

            DownloadProgressChangedEventArgs e)

        {

            pgsLoad.Value = e.ProgressPercentage;

            tbResult.Text = e.ProgressPercentage.ToString() + "% Completed";

        }

    }

}


WebClient 클래스를 이용하여 웹에서 동영상 경로를 설정하고 DownloadProgressChanged 메소드는 다운로드 되고 있는 상태를 PregressBar, TextBlack에 다운로드 되고 있는 결과를 보여줍니다.  ebclient_OpenReadCompleted 이벤트는 조건문을 통하여 다운로드 중 에러가 발생했는지 체크를 하고 에러가 없으면 결과값을 보여줍니다.



신고