달력

032010  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  

안녕하세요. 엘리 입니다.

10 8일에 Microsoft UX/RIA Partner Workshop에 참석했었습니다. 파트너는 아니지만 그냥 Silverlight에 관심 있는 개발자 입장으로요. ^^; REMIX08에서도 거론되고 Silverlight의 좋은 기능으로 많이 소개되었던 II7-Bit Rate Throttling (UXKOREA), 쉽게 구현할 수 있는 미디어 플레이어 (훈스닷넷), Cross Domain 설정, Silverlight Deep Zoom 기능 등 여러 기능들이 소개되었습니다. 각 기능들에 대해서 링크를 걸어두었으니 관심을 가지시고 읽어 보시기 바랍니다. Deep Zoom 소개는 영어로 소개하지만 영상도 있으니 가볍게 동영상을 보셔도 좋을 것 같습니다. ^^

 

세미나 후기라도 써보려고 오래된 똑딱이 디카도 가져가서 사진도 찍고 그랬는데 벌써 10월 말이니…--; 마지막에 경품을 받지 못해서 그런가 봅니다. 속으로는 ~~~ 드뎌 경품 추첨이다.’ 라고 기대는 매번 하는데표정은 티 안내고 앉아 있지만. ㅋㅋ 이번에도 아쉬움을 갖고 돌아왔습니다.

 

이번 시간에는 Expression Blend를 이용하여 간단한 Silverlight 시계를 만들어 보겠습니다. 먼저 개발을 위해 아래 파일들을 설치하시기 바랍니다. (Silverlight 다운로드 페이지)

 

- Microsoft Silverlight 2

- Visual Studio 2008 (평가판)

- Microsoft Silverlight Tools for Visual Studio 2008 SP1

- Microsoft Expression Blend 2.5

 

우선 아래 그림과 같이 시계의 표면이음 홈, 테두리, 그림자를 포함한 그래픽을 디자인해보겠습니다.

아래 절차를 따라 Expression Blend에서 새 프로젝트를 만듭니다.

 

1. Expression Blend를 실행합니다.

2. 메뉴의 파일, 새 프로젝트를 차례로 클릭하여 새 프로젝트 대화 상자를 띄웁니다.

3. 이름 상자에 원하는 Silverlight 애플리케이션 이름을 입력합니다.

4. 언어 상자에 Visual C#을 선택합니다.

5. Silverlight 2 애플리케이션을 선택하고 확인을 클릭합니다.

 

여기서 F5키를 한번 눌러볼까요? 이걸 누르면 브라우저 창이 하나 열리면서 웹 페이지가 열립니다.

이 때 확인하실 것이 하나 있습니다. 제가 현재 Silverlight 2 RTW를 설치해놓고 Expression Blend June Preview 버전을 사용하고 있는데, 필요한 Silverlight 버전은 베타 2 버전입니다. 저와 같은 환경을 가지고 있으시면 이전 버전의 파일을 삭제하시고 베타 2 버전을 설치하시기 바랍니다. 살짝 귀찮긴 하네요~^^;


Silverlight 2 애플리케이션 새 프로젝트를 만들었고 다음으로는 시계의 그림자 부분을 디자인해보겠습니다.

 

1. Blend의 도구 상자에서 타원 (Ellipse)을 선택합니다. (처음은 사각형만 보이지만 마우스를 길게 클릭하거나 오른쪽 마우스 버튼을 클릭하면 다른 도구도 추가로 표시됩니다.)

2. 하얀 캔버스에 타원을 드래그 & 드롭을 하여 대략 330픽셀 너비와 높이의 원을 그립니다.

3. Blend 우측 상단에 속성 탭을 선택하여 Fill을 선택합니다. 단색 브러시를 확인한 후 검정색으로 채우고 Opacity 30%로 변경합니다. , ④번은 싱크되어 있습니다. ④번에 black으로 입력하시면 16진수 값으로 변경이 되고 ②번 Fill 부분도 함께 변경이 됩니다. (아래 그림 참고)

4. 개체 및 타임라인 창에서 타원 이름shadowEllipse로 변경합니다.


이제 그림자는 완료하였습니다. 아주 간단하지요? 그럼 다음으로 시계 테두리를 그려 보겠습니다.

 

1. 그림자 원 shadowEllipse를 복사하여 동일한 크기의 원을 하나 더 만듭니다. shadowEllipse 선택하여 CTRL+C CTRL+V (copy & paste)합니다. 이 원의 이름은 outerRimEllipse로 지정합니다.


2. 테두리 원에는 그라데이션을 지정합니다. 먼저 개체 및 타임라인 창에서 outerRimEllipse를 선택합니다. 모양 창에서 Opacity 100%로 지정하고 브러시 창에서 Fill을 선택하고 그라데이션 브러시를 선택합니다.


3. 좌에서 우로 그라데이션 방향을 변경합니다. 먼저 도구 상자에서 브러시 변형을 선택합니다.
   그리고 타원에 생긴 화살표를 드래그 & 드롭하여 그라이데이션 방향을 설정합니다.

4. 그라데이션 좌측 지점 색상을 #FFE4E5F4로 변경하고 우측 지점 색상을 #FFC0C0C0로 변경합니다.

5. 테두리 원 outerRimEllipse선택 도구를 사용하여 우측 상단으로 조금 이동하여 그림자 원을 살짝 보이게 합니다.

   다음은 현재 까지의 그림입니다.

다음은 이음 홈을 만들어 보겠습니다. 이음 홈은 테두리 보다 좀 작을 뿐이지 디자인하는 방법은 비슷합니다.

 

1. 테두리 원 outerRimEllipse를 선택하고 CTRL+C, CTRL+V하여 동일한 원을 추가합니다. 이름은 bevelEllipse로 변경합니다.

 

2. 개체 및 타임라인 창에서 bevelEllipse를 선택하고 속성 탭을 열어 290 픽셀 정도로 outerRimEllipse보다 작게 크기를 변경합니다.

3. outerRimEllipse의 복사본이라 bevelEllipse 그라데이션이 적용되어 있을 것입니다. bevelEllipse의 좌측 지점을 #FF2F2F32, 우측 지점 색상을 #FFE4E5F4로 변경합니다.

이제 서서히 뭔가가 되어 가는 것 같네요. ^^ 다음은 bevelEllipse를 이용하여 시게 표면을 만들어 보겠습니다.

 

1. bevelEllipse의 복사본을 만들고 새로운 이름으로 faceEllipse로 지정합니다.

2. faceEllipse를 선택하고 bevelEllipse보다 좀 작은 270 픽셀 정도로 크기를 변경합니다.

3. faceEllipse의 색상을 단색 브러시를 이용하여 검정색으로 변경합니다. 그럼 아래와 같은 그림입니다.

다음은 시계 바늘들을 고정하는 중앙 원을 만들어 보겠습니다. 이게 없으면 바늘이 굴러 댕길 겁니다. --;

 

1. 도구 상자에서 타원 도구를 선택하고 시계 표면 (faceEllipse)에 원을 하나 그립니다.

2. 새로운 원의 이름을 centerEllipse로 변경합니다.

3. centerEllipse의 너비와 높이를 30으로 설정합니다.

4. stroke thickness 8로 설정하고 stroke를 원하는 색상으로 설정합니다.

5. centerEllipse 원을 faceEllipse 정중앙 (정준하 아님~;;)에 위치시키기 위해 개체 및 브라우저 창에서 faceEllipse를 선택한 후 정중앙을 확인하고 centerEllipse를 이동시킵니다.


다음은 시계 바늘들을 만들어 보겠습니다.

 

1. 도구 상자에서 사각형 도구를 선택합니다.

2. 먼저 초침을 만듭니다. 세 개 침 중에 가장 얇게 하고 원하는 색상으로 설정합니다. 방향은 12 향하게 하고 StrokeThickness 5로 설정하고. 이름은 secondHand로 변경합니다.


하얀색 점 이동 시 정중앙으로 설정이 잘 되지 않으면 CTRL+= 키 또는 메뉴 보기, 확대를 사용하여 좀 더 세밀하게 이동 시켜 보시기 바랍니다.

 

3. 분침도 마찬가지로 초침의 2단계를 따라하여 만듭니다.

4. 시침도 동일하게 만들고 분침보다 StrokeThickness와 길이를 좀 더 길게 만듭니다.

 

세 개 바늘 모두 12방향을 향하고 있을 테니 바늘 위치를 조정하면 아래와 같은 그림일 것입니다.

다음 시간에는 RotateTransform을 사용하여 이번 시간에 만든 시계를 실제로 작동해보도록 하겠습니다. 비가 오니 이제 정말 시원해질 것 같습니다. 환절기 감기 조심하세요. ^.^
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원본http://msdn.microsoft.com/en-us/library/bb404703(VS.95).aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

 

안녕하세요. 엘리 입니다.

이번 시간은 Silverlight-기반 응용 프로그램 개발에 대한 주요 기능과 예제 코드를 사용하여 Silverlight 기반 응용 프로그램을 만드는 일반적 절차를 소개하려고 합니다.

 

이번 시간에는 다음 항목들을 개략적으로 알아보는 시간을 갖습니다.

 

· 전제 조건

· 응용 프로그램에 Silverlight 통합

· XAML

· 레이아웃

· 컨트롤

· 코드 로직 추가하기

· 동적 언어

· 그래픽

· 미디어와 애니메이션

· 데이터

· 네트워킹

· Silverlight Base Class Library

· 관련 항목

 

전제 조건

예제 실행에는 Silverlight 2 베타 2 런타임만 설치해도 되지만 우리는 직접 개발을 하는 임무이므로 아래 항목들을 모두 설치하도록 합니다. ^^

 

· Silverlight 2 베타 2

· Silverlight 2 베타 2 SDK

· Visual Studio 2008 (90일 평가판)

· Visual Studio 2008용 Silverlight Tools 베타 2

 

참고:

응용 프로그램을 구축하기 위해 Visual Studio 2008을 사용하고 있다는 것으로 가정합니다. MSBuild를 사용하여 Visual Studio 없이도 Silverlight-기반 응용 프로그램을 만들 수 있습니다. 좀 더 자세한 정보는 Silverlight 응용 프로그램 어셈블리 개발을 참고하세요.

 

Silverlight-기반 응용 프로그램을 만들기 위해 Silverlight 응용 프로그램 만들기의 설명을 참고하시기 바랍니다.

 

응용 프로그램에 Silverlight 통합

Silverlight-기반 응용 프로그램은 HTML 페이지에서 Silverlight 플러그-인에 의해 로드됩니다. HTML 페이지를 Silverlight 플러그-인으로 전체를 채우거나 페이지의 일부에만 사용할 수도 있습니다. 기본적으로 Visual Studio 프로젝트에서는 페이지의 width height 값을 100%로 차지하는 플러그-인을 만들 것입니다. 좀 더 자세한 내용은 Silverlight 플러그- 예시 (Silverlight 2)를 참고하시기 바랍니다.

 

응용 프로그램의 일부에만 Silverlight를 적용한다면, Silverlight 코드와 관리되는 코드에서 HTML 페이지로 호출할 수 있습니다. 이를 수행하는 방법의 자세한 사항은 HTML 연결: HTML 관리되는 코드에서 상호 작용를 참고하시기 바랍니다. ASP.NET 페이지가 있다면, 여러분의 페이지에 MediaPlayer 컨트롤 또는 Silverlight 서버 컨트롤을 포함시킬 수 있습니다. 이에 대해 자세한 정보는 ASP.NET 페이지와 Silverlight 통합을 참고하시기 바랍니다.

 

XAML

XAML Silverlight 기반 응용 프로그램의 UI를 정의하는 선언적 마크업 언어입니다. 새로운 Visual Studio 프로젝트를 만들 때, Page.xaml 파일이 동적으로 만들어집니다. XAML 파일에 XML을 사용하여 특성들을 정의하고 개체를 만들 수 있습니다. XAML에 대한 좀 더 자세한 정보는 XAML 개요 (Silverlight 2)를 참고하세요.

 

Silverlight 응용 프로그램 추가 창의 옵션을 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성으로 선택하고 Silverlight 프로젝트를 생성합니다. 그리고 Page.xaml 파일을 열어 Grid 엘리먼트 안쪽에 아래 코드를 작성합니다.

 

XAML

<Rectangle Fill=”Red” Width=”150” Height=”100”/>

 

Ctrl + F5 키를 눌러 실행하거나 미리보기 창에서 빠르게 아래와 같은 결과를 확인합니다.



UI를 만들기 위해 XAML 파일을 직접 작성하거나 Microsoft Expression Blend를 사용할 수 있습니다. Expression Blend Silverlight-기반 응용 프로그램을 만들 수 있는 WYSIWYG 디자인 툴입니다. Expression Blend는 직접 편집할 수 있는 XAML 파일을 생성하고 Expression Blend로 코드-비하인드 파일을 작성하고 이벤트를 연결할 수도 있습니다. 좀 더 자세한 정보는 Microsoft Expression Blend 사용한 Silverlight 퀵스타트를 참고하시기 바랍니다.

 

레이아웃

SilverlightUI 레이아웃에 해당하는 3가지 패널을 제공합니다. 그 중 기본적 패널인 Grid는 가장 확장성이 있는 강력한 레이아웃 패널입니다.

 

컨테이너

설명

Canvas

x,y 공간에 절대적 자식 엘리먼트를 위치시킵니다.

StackPanel

수평이나 수직 스택에 관련 자식 엘리먼트를 위치 시킵니다.

Grid

행과 열에 자식 엘리먼트를 위치 시킵니다.

 

기존의 Page.xaml 파일에 아래 코드를 사용하여 수정합니다. 아래 예제에서 Rectangle 엘리먼트는 grid 1,1 셀에 위치 되어 있습니다. Grid는 제로-베이스 (0부터 시작하는 인덱스)를 사용하므로 rectangle은 우측 하단 셀에 나타납니다.

 

XAML

<Grid ShowGridLines=”True”>

    <Grid.ColumnDefinitions>

        <ColumnDefinition/>

        <ColumnDefinition/>

    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>

        <RowDefinitions/>

        <RowDefinitions/>

    </Grid.RowDefinitions>

 

    <Rectange Fill=”Red” Width=”150” Height=”100” Grid.Column=”1” Grid.Row=”1”/>

</Grid>

 

아래 그림은 위 코드가 어떻게 표현되는지 보여줍니다.


레이아웃에 좀 더 자세한 정보는 개체 위치 레이아웃 (Silverlight 2)를 참고하시기 바랍니다.

 

컨트롤

Silverlight 컨트롤은 컨텐트나 다른 컨트롤을 호스트하는 것과 상태가 변경되는 디스플레이를 나타내는데 사용합니다. 컨트롤은 Button이나 TextBox같은 사용자 상호 작용이 가능한 엘리먼트에서 DataGrid같은 정보의 복잡한 레이아웃 엘리먼트까지 기능적으로 사용 가능합니다. 모든 컨트롤의 목록은 컨트롤 갤러리에서 보실 수 있습니다.

 

Silverlight는 컨트롤이 어떻게 보여져 영향을 주는 각 컨트롤을 위한 기본 템플릿으로 나타납니다. 그러나 여러분은 모든 컨트롤의 외관과 시각 움직임을 변경하여 사용자 지정 템플릿을 만들 수 있습니다. 좀 더 자세한 정보는 컨트롤 사용자 지정화를 참고하시기 바랍니다.

 

아래 예제는 이 전 예제에서 grid 0,0 셀에 button 하나를 추가하여 만듭니다.

 

XAML

<Grid ShowGridLines=”True”>

    <Grid.ColumnDefinitions>

        <ColumnDefinition/>

        <ColumnDefinition/>

    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>

        <RowDefinitions/>

        <RowDefinitions/>

    </Grid.RowDefinitions>

    <Button Height=”25” Width=”100” Grid.Column=”0” Grid.Row=”0”/>

    <Rectange Fill=”Red” Width=”150” Height=”100” Grid.Column=”1” Grid.Row=”1”/>

</Grid>

 

아래 그림은 위 코드가 어떻게 표현되는지 보여줍니다.


코드 로직 추가하기

기본적으로 여러분의 Visual Studio 프로젝트는 코드 파일 하나를 포함하고 있는데, 코드-비하인드 파일이라 부릅니다. 그 코드 파일은 C#이나 Visual Basic같은 공통 언어 런타임 (CLR)을 통해 Silverlight에 의해 지원되는 관리되는 언어 중 하나입니다. CLR Silverlight의 좀 더 자세한 정보는 공통 언어 런타임 개요를 참고하세요.

 

코드-비하인드 파일 이름은 Page.xaml에 해당하는 Page.xaml.cs 같이 생성됩니다.. 코드-비하인드 파일은 XAML 개체에 로직을 적용할 수 있습니다. 코드에 UI 개체를 만들 수 있고 여러분의 시각 엘리먼트 트리에 그것들을 추가할 수 있습니다. 그리고 코드-비하인드 파일에서 (또한 프로젝트에 포함된 어떤 코드 파일에도) 만들어진 클래스는 XAML로부터 액세스될 수 있습니다. 예를 들어, 자신의 컨트롤을 정의하고 그 다음 XAML에 그 인스턴스를 만들 수 있습니다. 좀 더 자세한 정보는 XAML Namescopes (Silverlight 2)XAML and Mapping Custom XML Namespace Values (Silverlight 2)를 참고하시기 바랍니다.

 

다음 예제는 파란색 사각형의 색을 변경하는 Click 이벤트 처리기를 추가합니다.

 

XAML에서 ButtonClick 이벤트와 Rectanglex:Name 속성을 추가합니다. x:Name은 코드-비하인드 파일에서 rectangle을 참조할 때 사용합니다.

 

XAML

<Button Height=”25” Width=”100” Grid.Column=”0” Grid.Row=”0” Click=”Button_Click”/>

<Rectangle x:Name=”rect1” Fill=”Red” Width=”150” Height=”100” Grid.Column=”1” Grid.Row=”1”/>

 

코드-비하인드 파일에서 Click 이벤트 처리기를 정의합니다. 이벤트를 사용하는 것에 대한 좀 더 자세한 정보는 이벤트 개요 (Silverlight 2)를 참고하시기 바랍니다.

 

C#

private void Button_Click(object sender, RoutedEventArgs e)

{

    rect1.Fill = new SolidColorBrush(Colors.Blue);

}

 

아래 그림은 위 코드가 어떻게 표현되는지 보여줍니다.


예제 실행

 

동적 언어

SilverlightSilverlight-기반 응용 프로그램을 작성하기 위한 파이썬 (Python)과 루비 (Ruby) 같은 동적 언어의 사용자를 가능하게 하는 동적 언어 런타임 (DLR)을 포함합니다. 동적 언어는 어셈블리로 컴파일하지 않는 소스 코드로 패키지화 되어 있고 코드는 실행 때 컴파일 되고 생성될 수 있습니다. 그것들은 확장성, 상호적 개발 형식이 적절합니다. Silverlight 3개의 동적 언어를 포함합니다: IronPython IronRuby, 관리되는 Jscript. 좀 더 자세한 정보는 Silverlight 2 동적 언어를 참고하세요.

 

그래픽

Silverlight는 여러분의 응용 프로그램에 재미있는 기능을 추가하기 위해 많은 옵션을 제공합니다. 여러분은 drawing shapes, paths, 복잡한 도형들을 사용할 수 있습니다. 도형으로 정의된 영역은 brushes를 사용함으로서 images color gradients, video clips 같은 효과로 채워질 수 있습니다. 좀 더 자세한 정보는 Shapes and Drawing (Silverlight 2), Geometries (Silverlight 2), Brushes (Silverlight 2)를 참고하시기 바랍니다.

 

여러분은 여러분의 응용 프로그램에 이미지와 이미지 효과들을 추가할 수 있습니다. Silverlight는 또한 쉽게 줌을 사용하고 크게 상세한 이미지를 회전을 허용하는 Deep Zoom을 포함합니다. 좀 더 자세한 정보는 이미지 (Silverlight 2)Deep Zoom을 참고하시기 바랍니다.

 

아래 예제는 선형 그레디언트 브러쉬로 사각형을 채웁니다.

 

XAML

<Rectangle x:Name=”rect1” Width=”150” Height=”100” Grid.Column=”1”, Grid.Row=”1”>

    <Rectangle.Fill>

        <LinearGradientBrush>

            <GradientStop Offset=”0” Color=”LightBlue”/>

            <GradientStop Offset=”0.4” Color=”Blue”/>

            <GradientStop Offset=”0.8” Color=”Purple”/>

            <GradientStop Offset=”1.0” Color=”Lavender”/>

        </LinearGradientBrush>

    </Rectangle.Fill>

</Rectangle>

 

아래 그림은 위 코드가 어떻게 표현되는지 보여줍니다.


미디어 및 애니메이션

정적 그래픽뿐만 아니라 좀 더 동적이고 상호적인 여러분의 응용 프로그램을 만들기 위해 여러분은 애니메이션과 오디오, 비디오를 추가할 수 있습니다. 좀 더 자세한 정보는 애니메이션 개요 (Silverlight 2)오디와  비디오 개요 (Silverlight 2)를 참고하세요.

 

다음 예제는 Stop 버튼이 클릭되기까지 늘었다 줄었다하는 이전 예제로 사각형을 만듭니다.

 

XAML

<Grid ShowGridLine=”True”>

    <Grid.ColumnDefinitions>

        <ColumnDefinition/>

        <ColumnDefinition/>

    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>

        <RowDefinition/>

        <RowDefinition/>

    </Grid.RowDefinitions>

 

    <Grid.Resources>

        <Storyboard x:Name=”AnimateRectangle”>

            <DoubleAnimation Storyboard.TargetName=”rect1”                                 Stroyboard.TargetProperty=”Height” From=”0” To=”100” AutoReverse=”True” Duration=”0:0:02” RepeatBehavior=”Forever”/>

            <DoubleAnimation Storyboard.TargetName=”rect1”                                 Stroyboard.TargetProperty=”Width” From=”0” To=”100” AutoReverse=”True” Duration=0:0:04 RepeatBehavior=”Forever”/>

        </Storyboard>

    </Grid.Resources>

 

    <Button Height=”25” Width=”100” Grid.Column=”0” Grid.Row=”0” Content=”Stop” Click=”Button_Click”/>

    <Rectangle x:Name=”rect1” Width=”150” Height=”100” Grid.Column=”1”  Grid.Row=”1” Loaded=”OnLoaded”>

        <Rectangle.Fill>

            <LinearGradientBrush>

                <GradientStop Offset=”0” Color=”LightBlue”/>

                <GradientStop Offset=”0.4” Color=”Blue”/>

                <GradientStop Offset=”0.8” Color=”Purple”/>

                <GradientStop Offset=”1.0” Color=”Lavender”/>

            </LinearGradientBrush>

        </Rectangle.Fill>

</Rectangle>

<Button Height=”25” Width=”100” Grid.Column=”0” Grid.Row=”1” Content=”Start” Click=”Button_Click_1”/>

 

</Grid>

 

C#

private void OnLoaded(object sender, RoutedEventArgs e)

{

    AnimateRectangle.Begin();

}

 

private void Button_Click(object sender, RoutedEventArgs e)

{

    AnimateRectangle.Pause();

}

 

private void Button_Click_1(object sender, RoutedEventArgs e)

{

    AnimateRectangle.Resume();

}

 

예제 실행

 

데이터

많은 Silverlight-기반 응용 프로그램은 데이터와 함께 작동합니다. 여러분은 DataGridListBox 같은 컨트롤을 사용하여 데이터 셋을 나타낼 수 있습니다. UI를 두기 위해, 여러분은 Data Binding을 사용할 수 있습니다. 여러분의 데이터 개체에 여러분의 UI를 바인딩한다면, 동적으로 개체에 업데이트는 여러분의 UI에 전달됩니다.

 

데이터는 RSS 피드 같은 다양한 소스로부터 여러분의 응용 프로그램으로 나타날 수 있지만 대개 그것은 XML 포맷에 있습니다. Silverlight XML 데이터 파싱을 위해 XmlReader LINQ를 포함하고 있습니다. LINQ는 여러분이 작게 데이터 조각을 파싱한다면 장점을 가지고 있습니다. 좀 더 자세한 정보는 Silverlight에 XML 데이터 파싱을 참고하세요.

 

네트워킹

Silverlight는 네트워크에서 통신을 위해 몇몇의 기능을 제공합니다. WebClient 클래스는 클라이언트에 다운로드 되는 컨텐트를 처리합니다. 여러분은 또한 Plain XML 메시지를 보내고 받기 위해 WebClient를 사용할 수 있습니다. 또한 여러분의 Silverlight-기반 응용 프로그램은 Windows Communication Foundation (WCF) SOAP, ASP.NET AJAX 같은 웹 서비스를 액세스할 수 있습니다. 좀 더 자세한 정보는 네트워킹과 통신을 참고하세요.

 

Silverlight Base Class Library

Silverlight는 문자열 처리와 컬렉션 작업, 예외 처리 같은 핵심 프로그래밍 업무를 위한 .NET Framework 부분 집합으로 나타납니다. 그것은 모든 기본 데이터 형식을 위한 클래스와 예외 처리, 이벤트와 이벤트 처리, 컬렉션, 쓰레딩, 동기화를 포함합니다. 좀 더 자세한 정보는 Silverlight에서 Common Language Runtime 및 Base Library를 참고하세요.

 

참고 항목

검토: Silverlight 시계 만들기

Silverlight 퀵스타트 문서

Silverlight 아키텍쳐

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원본http://silverlight.net/Quickstarts/Remote/323aac2f-14cc-4dd8-bb40-fa2cb3c2e522.aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

 

이번 시간에는 서버와의 통신 없이 관리되는 코드 (.cs 파일)을 이용해서 HTML Document Object Model (DOM)에 동적으로 액세스할 수 있는 방법을 설명합니다.

 

사전 준비 사항

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008용 Silverlight Tools 베타 2

 

Test 페이지에 HTML 엘리먼트 추가하기

먼저, 생성할 테스트 페이지에 버튼 및 텍스트 박스, 등의 HTML 엘리먼트를 추가할 것입니다.

 

1. Visual C# Silverlight 응용 프로그램 프로젝트 하나를 만듭니다. 솔루션에 컨트롤을 호스팅할 새 웹 추가 옵션이 선택되어진 것을 확인합니다. 저는 프로젝트 이름을 EloiHtmlDom으로 설정하였습니다. (참고: Silverlight 응용 프로그램 만들기)

 

2. 시작 페이지를 HTML 테스트 페이지로 설정하고 소스뷰를 엽니다.

시작 페이지 설정은 EloiHtmlDomWeb의 마우스 우측 클릭하여 속성 페이지 시작 옵션에서 변경 가능하며 간단히 HTML 테스트 파일에 마우스 우측 클릭하여 시작 페이지로 설정으로도 변경 가능합니다.

                                                          속성 페이지에서 설정하는 화면


                                                           시작 페이지로 설정을 이용한 설정

3. <object> 태그를 찾아 height 속성을 “100%”에서 “10%”로 변경합니다.

 

4. </iframe> 태그 뒤에 다음 HTML 코드를 추가합니다. 이 코드에는 두 개의 버튼과 텍스트 박스 세 개를 포함하고 있습니다.

 

<div id=”basic1”>

   <h3> Silverlight 관리되는 코드로 HTML 버튼 다루기</h3>

   <hr />

   <strong>첫 번째 텍스트 박스의 텍스트를 두 번째 텍스트 박스에 대문자로 변경</strong><br />

   <label>여기에 텍스트를 입력하세요:</label>&nbsp;

   <input type=”text” id=”txtInput” disabled=”disabled” size=”35” />&nbsp;

   <button type=”button” id=”btnUCtxt”>대문자 처리</button>

   <br /><br />

   <label>처리 결과:</label>

   <input type=”text” id=”txtOutput” size=”60” />

</div>

<br /><br />

<div id=”basic2”>

   <button type=”button” id=”btnGetProperties”>속성 가져오기</button><br />

   <input type=”text” id=”txtOutputProperties” size=”60” />

</div>

 

5. 응용 프로그램을 실행 시키면(ctrl + F5 키를 이용하여 디버깅을 사용하지 않고 실행 시킵니다.) 대문자 처리 버튼과 속성 가져오기 버튼, 텍스트 박스 3개를 볼 수 있습니다. 먼저 첫 번째 텍스트 박스 에 대해서 다루려고 합니다. 현재 value는 없고 disabled 상태입니다. 

관리되는 클래스에서 HTML 페이지 연결하기

관리되는 클래스에서 HTML 페이지에 연결하기 위해 먼저 Page 생성자에서 참조를 초기화 합니다.

 

1. 코드 비하인드 파일을 (Page.xaml.cs) 열어 Page 클래스를 찾습니다.


2. using
키워드를 사용하여 System.Windows.Browser 네임스페이스를 추가합니다.


3. HtmlDocument
타입의 클래스 레벨 _doc 변수를 선언합니다.


4. Page
생성자의 _doc 변수를 초기화합니다.

 

현재 HTML 페이지의 인스턴스로 _doc 변수를 사용합니다.

 

namespace EloiHtmlDom

{

    Public partial class Page : UserControl

    {

        private HtmlDocument _doc;

        public Page()

        {

            InitializeComponent();

            _doc = HtmlPage.Document;

HTML DOM 속성에 액세스하기

다음은 첫 번 째 txtInput 텍스트 박스의 속성을 동적으로 속성을 변경해보도록 하겠습니다.

 

1. Page 생성자의 끝 부분에 다음 코드를 추가합니다.

 

HTML document objectGetElementById 메서드를 사용해서 disabled 상태를 변경하고 새로운 값을 설정합니다.

CS

// Return for all pages except those ending in TestPage.html

if (_doc.DocumentUri.AbsoluteUri.EndsWith(“TestPage.html”) != true)

    return;

 

_doc.GetElementById(“txtInput”).SetProperty(“disabled”, false);

_doc.GetElementById(“txtInput”).SetAttribute(“value”, “This is set from managed code.”);

 

2. 응용 프로그램을 실행 시킵니다.

txtInput 텍스트 박스에는 “This text is set from managed code.”가 나타날 것입니다. 그리고 입력 가능하게 되었습니다.

HTML DOM 엘리먼트의 이벤트 처리

HTML DOM 엘리먼트의 이벤트를 처리할 이벤트 핸들러를 추가합니다.

 

1. Page 생성자의 끝 부분에 아래 코드를 추가하여 대문자 처리 버튼의 onclick 이벤트의 이벤트 핸들러를 추가합니다.

 

  btnUCtxt 엘리먼트에 참조를 btnUC 인스턴스 변수에 대입하고 btnUC 변수를 사용하여 버튼의 onclick 이벤트에 이벤트 핸들러를 추가합니다.

 

CS

// Add event handler for Uppercase Text button.

HtmlElement btnUC = _doc.GetElementById(“btnUCtxt”);

btnUC.AttachEvent(“onclick” new EventHandler<HtmlEventArgs>(this.OnUCtextClicked));

 

2. 대문자 처리 버튼의 onclick 이벤트의 OnUCtextClicked라는 이벤트 핸들러를 작성합니다.

3. 이벤트 핸들러에서 HTML 엘리먼트의 속성을 읽거나 씁니다.

예를 들어, 다음의 OnUCtextClicked 이벤트 핸들러에서 SetAttributeGetAttribute 메서드는 속성 값을 쓰고 읽기위해 txtInputtxtOutput 엘리먼트에서 사용됩니다. txtInput 엘리먼트에 입력된 텍스는 대문자로 변환되고 txtOutput 엘리먼트의 value 속성에 할당됩니다.

 

CS

void OnUCtextClicked(object sender, HtmlEventArgs e)

{

    HtmlElement input = _doc.GetElementById(“txtInput”);

    HtmlElement output = _doc.GetElementById(“txtOutput”);

    output.SetAttribute(“value”, input.GetAttribute(“value”).ToUpper());

}

 

4. 응용 프로그램을 실행하고 대문자 처리 버튼을 클릭합니다.

HTML DOM에서 메서드 호출하기

마지막으로 HTML DOM에서 메서드를 호출합니다.

 

1. Page 생성자의 끝 부분에 아래 코드를 추가하여 속성 가져오기 버튼의 onclick 이벤트의 이벤트 핸들러를 추가합니다.

 

첫 번째 버튼과 마찬가지로 btnGetProperites 엘리먼트 참조를 btnPropGet 인스턴스 변수에 대입하고 속성 가져오기 버튼의 onclick 이벤트의 이벤트 핸들러를 추가합니다.

 

CS

// Add event handler for Get Properties button.

HtmlElement btnPropGet = _doc.GetElementById(“btnGetProperties”);

btnPropGet.AttachEvent(“onclick”, new EventHandler<HtmlEventArgs>(this.OnGetPropClicked));

 

2. 속성 가져오기 버튼의 OnGetPropClicked라는 onclick 이벤트 핸들러를 작성합니다.

3. 이벤트 핸들러에서 호출하려는 메서드의 HTML 엘리먼트에 동적 참조를 얻고 메서드를 호출합니다.

.

예를들어, 다음 OnGetPropClicked 이벤트 핸들러는 현재 페이지의 포트번호와 쿠키 상태, URI (Uniform Resource Identifier)를 나타낼 HtmlPage 개체를 사용하는 방법을 보여줍니다.

 

CS

void OnGetPropClicked(object sender, HtmlEventArgs e)

{

    string outputText = “”;

    // _doc 선언한 밑에 아래 주석과 같이 _count 변수를 초기화합니다.

    // private int _count = 0;

_count++;

 

    switch (_count % 3)

    {

        case 0:

            outputText = “DocumentUri.AbsolutePath: “ + HtmlPage.Document.DocumentUri.AbsolutePath;

            break;

 

        case 1:

            outputText = “Cookies Enabled: “ + HtmlPage.BrowserInformation.CookiesEnabled.ToString()

            break;

 

        case 2:

            outputText = “Port: “ + HtmlPage.Document.DocumentUri.Port.ToString();

            break;

}

_doc.GetElementById(“txtOutputProperties”).SetAttribute(“value”, outputText);

}

 

4. 응용 프로그램을 실행하고 속성 가져오기 버튼을 여러 번 클릭합니다.

버튼을 클릭할 때마다 txtOutputProperties 엘리먼트는 페이지의 URI와 쿠키 사용 가능 여부, URI를 위한 포트 번호 중 하나를 나타납니다.

지금까지 관리되는 코드에서 (.cs 파일) HTML DOM에 액세스하는 것에 대해서 알아보았습니다.
행복한 하루 보내세요
~^.^


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원본: http://silverlight.net/Quickstarts/Remote/ed86e719-0da0-49e1-a9e1-b31f483070d4.aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하세요. 엘리입니다.

이번 시간은 RSS 2.0 또는 Atom 1.0과 같은 Syndication 서비스에 액세스할 수 있는 Silverlight 클라이언트를 만들어 보도록 하겠습니다.

 

사전 준비 사항

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008용 Silverlight Tools 베타 2

- Silverlight SDK 2.0 베타 2

 

Silverlight 웹 서비스 지원에 대해서 좀 더 자세한 정보는 Silverlight 서비스 예제를 참고하시기 바랍니다.

 

먼저 Silverlight 클라이언트 응용 프로그램을 만들어 보도록 하겠습니다.

 

1. Visual Studio 2008을 열어 파일 새 프로젝트를 선택합니다. 프로젝트 형식을 Silverlight로 선택하고 Silverlight 응용 프로그램 템플릿을 선택합니다.

 

2. 프로젝트 이름을 원하는 것으로 입력하시고 확인을 클릭합니다. 저 같은 경우는 EloiSyndication으로 하였습니다.

 

3. Silvierlight 응용 프로그램 추가 창에서 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하고 확인을 클릭합니다.

 

Silverlight 응용 프로그램에서 Syndication 관련 작업을 위해 System.ServiceModel.Syndication.dll을 참조에 추가합니다.

 

1. 솔루션 탐색기에서 참조를 마우스 우측 클릭을 하여 참조 추가를 선택합니다.

사용자 삽입 이미지
2.
참조 추가 창의 .NET 탭에서 System.ServiceModel.Syndication을 선택하고 확인을 클릭합니다.
사용자 삽입 이미지
3.
아래 코드를 Page.xaml.cs 파일에 추가합니다.

 

using System.ServiceModel.Syndication;

using System.Xml;

 

다음은 syndication feed 요청을 위한 HTTP request를 만듭니다.

 

1. 먼저 이 컨트롤에서 액세스하기 원하는 syndification feed 하나를 찾아 그 주소를 메모해둡니다. 이 예제에서는 http://www.setisigns.net/rss를 사용하겠습니다. 크로스 도메인을 가능하기 위해 feed를 호스팅하는 도메인의 루트에 Clientaccesspolicy.xml이나 Crossdomain.xml 파일을 위치 시켜야합니다.

(: http://www.setisigns.net/Clientaccesspolicy.xml, http://www.setisigns.net/Crossdomain.xml)

 

Clientaccesspolicy.xml

<?xml version=”1.0” encoding=”utf-8”?>

<access-policy>

    <cross-domain-access>

        <policy>

    <allow-from http-request-headers=”*”>

        <domain uri=”*”/>

    </allow-from>

    <grant-to>

        <resource path=”/” include-subpaths=”true”/>

    </grant-to>

</policy>

</cross-domain-access>

</access-policy>

 

Crossdomain.xml

<?xml version=”1.0”?>

<!DOCTYPE cross-domain-policy SYSTEM

 “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>

<cross-domain-policy>

    <allow-http-request-headers-from domain=”* “ headers=”*” />

</cross-domain-policy>

 

 

2. Page.xaml.cs 파일을 열어 Page() 메서드 안에 받고자 하는 syndication feed uri를 설정하여 HTTP request를 만듭니다. 좀 전에 메모해둔 feed 주소를 사용합니다.

 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(“http://www.setisigns.net/rss”));

 

3. 비동기 HTTP request를 만들고 콜백을 등록합니다.

 

request.BeginGetRespone(new AsyncCallback(responseHandler), request);

 

4. 위 코드를 포함한 Page 메서드는 아래와 같습니다.

 

public Page()

{

    // Required to initialize variables

    InitializeComponent();

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(“http://www.setisigns.net/rss”));

    request.BeginGetResponse(new AsyncCallback(responseHandler), request);

}

 

다음은 스트림에 대한 XMLReader를 받고 SyndicationFeed 클래스 인스턴스를 만듭니다.

 

1. responseHandler 콜백 함수에서 HTTP response를 받습니다.

 

void responseHandler(IAsyncResult asyncResult)

{

    HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

    HttpWebResponse respone = (HttpWebResponse)request.EndGetResponse(asyncResult);

}

 

2. responseHandler에 스트림을 받는 XML 리더를 만들고 SyndicationFeed 클래스 안에 그 리더를 로드합니다.

 

XmlReader reader = XmlReader.Create(response.GetResponseStream());

SyndicationFeed feed = SyndicationFeed.Load(reader);

 

이제 SyndicationFeed를 사용하여 실제 syndication feed의 출력 부분의 코드를 작성합니다.

 

1. Page.xaml 파일을 열어 Grid안에 TextBlock을 추가합니다.

 

<TextBlock x:Name=”feedContent” />

 

 

2. SyndicationFeed 개체가 생성되고 각 SyndicationItem 개체에 액세스하는 Items 컬렉션으로 루프를 돌립니다. 이 예제는 제목과 TextBox 컨트롤에 각 항목의 날짜를 추가합니다.

 

foreach (SyndicationItem item in feed.Items)

{

    feedContent.Text += “* “ + item.Title.Text + Enviroment.NewLine;

    feedContent.Text == “ Published on: “ + item.PublishDate + Enviroment.NewLine;

}

 

3. 비동기 요청 콜백 함수는 아래와 같습니다.

 

void responseHandler(IAsyncResult asyncResult)

{

    HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

 

    XmlReader reader = XmlReader.Create(response.GetResponseStream());

    SyndicationFeed feed = SyndicationFeed.Load(reader);

 

    Foreach (SyndicationItem item in feed.Items)

    {

        feedContent.Text += “* “ + item.Title.Text + Enviroment.NewLine;

        feedContent.Text += “  Published on: “ + item.PublishDate + Enviroment.NewLine;

}

}

 

4. 이제 Ctrl + F5를 눌러 브라우저에서 feed 리스트를 확인하시기 바랍니다.

 

즐거운 추석 연휴 보내시고 맛있는 것도 많이 드세요. ^^ 고향에 내려가시는 분들은 오고 가시는 길 많이 힘드시겠지만 가족들과의 만남이 더 뜻 깊을 거라 믿습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원본: http://silverlight.net/Quickstarts/Remote/UsingREST.aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

 

안녕하세요. 엘리 입니다.

이번 시간에는 HTTP 전송을 사용하여 Plain XML 메시지 (Plain Old XML 또는 POX 메시지라고도 부릅니다.)를 받는 방법에 대해서 알아보도록 하겠습니다.

 

POX 메시지는 SOAP으로 포장되지 않은 순수 XML 데이터로 이루어져 있고 SOAP 기반의 프로토콜을 지원하지 않는 여러 종류의 클라이언트 (: 웹 브라우저)에서 주고 받게 됩니다. SOAP과 WS-* 외에 HTTP를 사용하여 통신할 때 POX는 데이터를 전달받는 좋은 방법입니다.

 

그럼 바로 예제를 보도록 하겠습니다. 아래 예제는 WebClient 클래스를 사용하여 웹 서비스에 액세스합니다. 웹 서비스와 Silverlight 기반 응용 프로그램이 같은 도메인상에서 호스팅되면 웹 서비스와 Silverlight 기반 응용 프로그램을 원활히 사용할 수 있습니다. 웹 서비스와 통신하는 Silverlight 기반 응용 프로그램을 만들 때 Silverlight 컨트롤은 웹 서버로부터 서비스되는 웹 페이지 내에서 호스팅 되어야 합니다. 파일 시스템 (: HTML 테스트 페이지)에서 웹 서비스와 통신을 하게 되면 보안 예외가 발생할 것입니다.

 

참고

현재 WebClient 클래스는 크로스 도메인을 지원하지 않습니다. 현재 릴리스된 WebClient는 같은 서버에서 웹 서비스와 Silverlight 기반의 응용 프로그램이 호스팅되어야 합니다. 웹 서비스와 Silverlight 기반 응용 프로그램이 다른 도메인에서 호스팅되고 있으면 웹 서비스에 크로스 도메인이 가능하게 XML Policy 파일이 있어야 합니다. 좀 더 자세한 정보는 MSDN에서 How to: Make a Service Available Across Domain Boundaries를 참고하시기 바랍니다.

 







다음은 XML로 결과가 리턴되는 웹 서비스에 액세스하는 방법에 대해서 소개합니다.

 

1. Silverlight 프로젝트 하나를 만듭니다. Silverlight 응용 프로그램 추가 창에서 솔루션에 컨트롤을 호스팅할  새 웹 추가를 선택합니다. 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성 옵션을 선택하면 보안 관련 예외 발생이 일어납니다. (참고: Silverlight 응용 프로그램 만들기)

 

2. Silverlight 프로젝트에서 System.Net 어셈블리에 참조를 가지고 있는 확인합니다.


사용자 삽입 이미지

그리고 웹 서비스를 호출하기 위해 System.Net의 클래스들이 필요하므로 Page.xaml.cs 파일에서 System.Net 네임스페이스가 추가되었는지 확인합니다.

사용자 삽입 이미지

3. 웹 서비스를 호출하기 위해 WebClient를 만들고 DownloadStringAsync(Uri) 메서드를 호출합니다. 호출하기 원하는 웹 서비스에 파라미터로 URI를 전달합니다.

 

4. 웹 서비스 호출의 결과값을 알기 위해, 웹 클라이언트에 DownloadStringCompleted 이벤트를 사용합니다. 그리고 웹 서비스 결과값을 얻기 위해 DownloadStringCompletedEventArgsResult 속성을 사용합니다. 결과값을 추가로 처리하거나 단지 사용자에게 결과값을 보여주기만 할 수도 있습니다. 웹 서비스 호출에 에러가 발생했는지 알기 위해서 이벤트 인수의 Error 속성을 사용합니다.

 

다음 예제는 Digg 웹 서비스에 요청을 보내는 방법과 XML로 응답을 돌려받는 방법에 대해서 보여줄 것입니다. 텍스트 박스에 숫자를 입력하고 버튼을 클릭하면 응답으로 XML을 볼 수 있습니다. Digg 웹 서비스가 다른 도메인에 있더라도 Digg 웹 서비스가 크로스 도메인을 호출을 지원하기 때문에 이 요청은 작동할 것입니다.

 

page.xaml 파일을 열어 아래 코드를 입력합니다.

 

CS

<UserControl x:Class="EloiShowPox.Page"

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

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

    FontFamily="맑은 고딕" FontSize="11"

    Width="500" Height="600">

    <!—UserControl border 설정합니다.-->

<Border BorderBrush="Black" BorderThickness="2" >

        <StackPanel Orientation="Vertical">

            <TextBlock  Margin="5" Text="POX 예제" />

            <!—StackPanel TextBlock TextBox 엘리먼트를 수평으로 지정하기 위해 Orientation 속성을 Horizontal 설정합니다.-->

<StackPanel Orientation="Horizontal" Margin="5">

                <TextBlock VerticalAlignment="Center"

                   Text="텍스트 박스에 숫자를 입력하세요: (1-4) " />

                <TextBox x:Name="numTextBox" Width="20" />

            </StackPanel>

            <!—Button_Click 이벤트 핸들러를 설정합니다.-->

<Button Width="160" HorizontalAlignment="Left" Margin="5"

              Content=" 서비스에서 응답 받기"

                Click="Button_Click" />

            <!—POX TextBlock 자리입니다.-->

            <TextBlock x:Name="resultBlock" Grid.Row="3" TextWrapping="Wrap" />

        </StackPanel>

    </Border>

</UserControl>

 

다음으로는 page.xaml.cs 파일을 열어 아래 코드를 작성합니다.

 

CS

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Net;

 

namespace EloiShowPox

{

    public partial class Page : UserControl

    {

        WebClient client = new WebClient();

 

        public Page()

        {

            InitializeComponent();

            // 이벤트와 핸들러를 지정합니다.

client.DownloadStringCompleted +=

new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);

        }

 

        private void Button_Click(object sender, RoutedEventArgs e)

        {

            // numTextBox 입력한 숫자만큼의 이미지 관련 POX 가져옵니다.

string url1 = "http://services.digg.com/galleryphotos?count=" +

                numTextBox.Text +

                "&appkey=http%3A%2F%2Fwww.silverlight.net";

            // DownloadStringAsync(Uri) 메서드를 사용하여 문자열로 요청

            client.DownloadStringAsync(new Uri(url1));

        }

        // DownloadStringCompleted 이벤트 핸들러

void client_DownloadStringCompleted(object sender,

            DownloadStringCompletedEventArgs e)

        {

            // DownloadStringCompletedEventArgs Result 속성을 사용하여 TextBlock 해당 내요을 표시합니다.(POX 메시지나 에러 메시지가 출력되겠지요? ^^)

if (e.Error == null)

            {

                resultBlock.Text = e.Result;

            }

 

            else

                resultBlock.Text = e.Error.Message;

        }

    }

}

 

응용 프로그램을 실행시키면 page.xaml에 작성한 resultBlock 이름으로 지정한 TextBlock Digg 웹서비스에서 받은 POX가 표시됩니다. (정상적일 경우 ^^~)


사용자 삽입 이미지
 

참고 사항


WebClient
클래스


이번 시간은 여기까지입니다. 다음 시간에는 Silverlight에서 Syndication Feeds에 액세스하는 것에 대해서 함께 알아보겠습니다. 추석이 다가오네요. 풍성한 추석 보내시고 건강하세요~^^

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원글출처 : http://silverlight.net/Quickstarts/BuildUi/SplashScreen.aspx
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.


안녕하세요 엘리 입니다.

이 번 시간에는 Silverlight 기반 응용 프로그램이 로드되기 전에 나타나는 스플래시 스크린 (Splash Screen) 대해서 알아보겠습니다.

 

여러분이 Silverlight 응용 프로그램이 포함된 웹 페이지에 접근을 하게 될 때 XAML을 참조하는 어셈블리나 패키지가 브라우저에 배포됩니다. 이 때 배포되는 패키지 용량이 클 경우 아무런 알림 없이 사용자들을 기다리게 한다면 그 사이트를 떠나는 사람이 적지 않을 것입니다. 이럴 때 다운로드 되는 동안 그 진행률을 보여주게 되면 좀 더 나은 사용자 경험을 제공할 수 있을 것입니다. 아래 그림이 스플래시 스크린입니다. 용어가 생소할지 모르지만 그림으로 보니 확실히 어떤 것인지 아시겠지요? 

사용자 삽입 이미지
사전 준비 사항

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008용 Silverlight Tools 베타 2

 

1.1 알파 버전 이후 스플래시 스크린이 변화된 점


스플래시 스크린 모델은 Silverlight 1.1 알파 버전 이후로 변경된 점이 있습니다. 현재는 스플래시 스크린이 플러그인 API에 빌트인 되었고 스플래시 스크린을 사용을 위해 별도의 페이지를 만들 필요 없이 스플래시 스크린이 기본적으로 제공되기도 합니다. 대신에 스플래시 스크린 소스와 패키기 기본 소스는 각각 분리되어 있고 진행은 플러그인에 의해 자동적으로 조정됩니다.

 

Silverlight 2 베타 2와 동일한 점도 있습니다. Silverlight 기반 응용 프로그램이 관리되는 프로그래밍 모델을 사용하고 있음에도 관리되지 않는 프로그래밍 모델인 JavaScript와 연동이 되어 여전히 사용하고 있다는 점입니다. 다운로드가 완료되고 패키지가 로드되어서 Silverlight 응용 프로그램이 사용 가능할 때 일반적으로 관리되지 않는 프로그래밍 모델에서 관리되는 프로그래밍 모델로 바뀌고 응용 프로그램이 실행되는 동안 여전히 관리되는 프로그램으로 유지됩니다.

 

다운로드 진행과 완료 이벤트


실버라이트 스플래시 스크린은 Silverlight 플러그인에서 제공하는 3가지 속성을 사용합니다.

 

splashscreensource: 패키지 (소스)가 다운로드 되는 동안 보여줄 XAML 페이지의 URI

onsourcedownloadpregresschanged: 소스가 다운로드 되는 동안 지속적으로 호출될 JavaScript 이벤트 핸들러 참조. 이 이벤트는 전체 다운로드의 약 0.5% 정도까지 나눌 정도로 아주 많이 발생합니다.

onsourcedownloadcomplete: 소스가 다운로드될 때 한 번 호출될 JavaScript 이벤트 핸들러 참조.

 

기본 제공 스플래시 스크린


기본 제공되는 스플래시 스크린은 패키지 다운로드 시간이 지정된 한계 시간인 500 ms를 넘어서면 나타나게 됩니다. 기본 애니메이션을 보여줄 XAML과 초기화 순서는 실버라이트 플러그인에 하드 코딩 되어있습니다.

 

기본 스플래시 스크린을 사용하지 않고 개별적으로 만들어 사용하려면 HTML 파일의 OBJECT 태그에 정의되어 있는 Silverlight 플러그인의 splashScreenSource 파라미터 값을 사용해야 합니다. 이 것은 조금 후에 좀 더 자세히 알아보도록 하겠습니다. 또는 Silverlight.js 파일을 사용한다면 CreateObject / CreateObjectEx 함수를 호출하는 부분에 splashScreenSource 파라미터 값을 지정하면 됩니다.

 

프로젝트 파일 설정하기


이러한 종류의 프로젝트를 설정하는 방법은 여러 가지가 있지만 여기선 기본적인 Silverlight 프로젝트를 사용하도록 하겠습니다. 스플래시 스크린 테스트를 위해 응용 프로그램 용량을 크게 할 필요가 있습니다. 용량이 적다면 스플래시 스크린을 보지 못하고 바로 Silverlight 응용 프로그램만 보게 될 것입니다. 그럼 기본으로 제공되는 스플래시 스크린을 구경해보겠습니다. ^^

 

1. 먼저 EloiSplashScreen이라는 새 프로젝트를 하나 만듭니다.

 

중요

다운로드되는 진행 상황을 보기 위해서는 기본 디버깅 옵션인 상태로 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하셔야 합니다. HTML 페이지 동적 생성 옵션을 선택하면 너무 빠르게 파일이 다운로드되어 스플래시 스크린을 볼 수 없게 됩니다.

 

 

2. 스플래시 스크린 테스트를 위해 용량이 큰 패키지를 만들어야 합니다. 실제로는 참조하지 않고 단지 용량이 큰 리소스 파일을 어셈블리에 추가시킵니다. 이 파일들은 패키지에 포함되지 않습니다. 아래와 같이 이 파일들을 추가 기존 항목을 사용하여 프로젝트에 추가시킵니다. 최소한 5 MB를 초과하도록 합니다. 저는 mp3 파일 추가시켰습니다. ^.^ 

사용자 삽입 이미지
 참고로 저는 처음에 EloiSplashScreenWeb에 파일을 추가해서 수 십 분 동안 스플래시 스크린을 보질 못했습니다. 별의 별 생각이 다 들면서…’이거 버그 아냐?’ -- ‘정말 기본으로 제공되는게 있긴 한거야?’ ‘빨리 보고 싶단 말이야하면서ㅋㅋ 그리고 EloiSplashScreenWeb에 추가를 하면 아래 나올 속성 창에 빌드 작업 속성이 나타나질 않습니다. --

 

그럼 정확히 파일을 추가하셨다면 해당 파일 빌드 작업 (Build Action) 속성을 포함 리소스 (Embedded Resource)로 지정합니다.  

사용자 삽입 이미지

3. 패키지 다운로드가 완료되었는지 확인하기 위해 간단히 TextBlock같은 UI 엘리먼트를 page.xaml 파일에 추가하도록 합니다. 

사용자 삽입 이미지

 4. 프로젝트를 빌드하고 컴파일을 확인합니다. 그러면 아래와 같은 기본 스플래시 스크린을 볼 수 있습니다.

로드 후엔 TextBlock에 추가한 Mission Success 텍스트가 나타납니다.
사용자 삽입 이미지

기본으로 제공되는 화면도 예쁘네요. ^^ 그렇지만 좀 더 아름답고 개성을 살린 사용자 지정 스플래시 스크린을 만들어 보도록 하겠습니다. 예제가 기본 제공되는 화면보다 괜찮을런지는 모르겠네요. --

 

사용자 지정 스플래시 스크린 추가하기


이 번엔 사용자 지정 스플래시 스크린을 추가하기 위해 EloiSplashScreen 프로젝트가 아니라 EloiSplashScreenWeb 프로젝트를 변경할 것입니다. 이 것은 스플래시 스크린를 위한 XAML 페이지가 패키지 외부에 있어야 하기 때문입니다. 그러나 패키지가 자체가 다운로드 되는 동안 유효하지 않을 수 있습니다.

 

그럼 사용자 지정 스플래시 스크린을 추가하는 방법을 자세히 알아보도록 하겠습니다.

 

1. 솔루션 탐색기에서 EloiSplashScreenWeb을 마우스 우측 버튼을 이용하여 속성 페이지를 선택합니다. 시작 옵션에서 시작 페이지를 EloiSplashScreenTestPage.aspx에서 EloiSplashScreenTestPage.html로 변경합니다. 직접 텍스트를 변경해도 되고 우측 버튼을 이용하여 시작할 페이지를 직접 선택하셔도 됩니다.

 

사용자 삽입 이미지

2. 계속해서 마우스 우측 버튼을 이용하여 EloiSplashScreenWeb을 선택하여 새 항목 추가를 선택합니다. 템플릿 창에서 Silverlight Jscript 페이지를 선택하고 이름을 EloiSplashScreen.xaml로 변경하고 추가 버튼을 클릭합니다.

 

사용자 삽입 이미지

3. EloiSplashScreen.xaml 파일을 열어 기존 코드를 모두 지우고 아래 코드를 코딩합니다. 코드 내용이 좀 길게 느껴질 수 있지만 직접 코딩을 해보시기 바랍니다. 직접 코딩을 함으로써 조금 더 생각을 할 수 있고 사소한 오타로 오류가 발생해도 실제 멋진 Silverlight 응용 프로그램을 만들 때에 현재의 작은 오류 해결이 큰 도움을 줄 것입니다. ^^

  

<Canvas

        xmlns="http://schemas.microsoft.com/client/2007"

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

        x:Name="parentCanvas"

        Width="850"

        Height="600"

        Background="OldLace"

        >

  <Canvas Canvas.Top="228.834" Canvas.Left="246.329" Width="357" Height="31.379">

    <Rectangle Width="27.545" Height="1" x:Name="uxProgress" Canvas.Top="29.545" Canvas.Left="1.4">

    <Rectangle.RenderTransform>

      <TransformGroup>

        <ScaleTransform x:Name="uxProgressBar" ScaleX="1" ScaleY="0"/>

        <SkewTransform AngleX="0" AngleY="0"/>

        <RotateTransform Angle="270"/>

        <TranslateTransform X="0" Y="0"/>

      </TransformGroup>

    </Rectangle.RenderTransform>

    <Rectangle.Fill>

      <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

        <GradientStop Color="#FFFFFFFF" Offset="1"/>

        <GradientStop Color="#FFFFFFFF" Offset="0"/>

        <GradientStop Color="#FF2975D0" Offset="0.28"/>

        <GradientStop Color="#FF2975D0" Offset="0.72"/>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

 

  <TextBlock x:Name="uxStatus" Height="25" Canvas.Left="125" Text="Loading..." TextWrapping="Wrap" Canvas.Top="4.16"/>

 

  <Path Width="356.85" Height="1" Fill="#FF3A3A3A" Stretch="Fill" Stroke="#FF000000" Canvas.Top="0" Data="M0,170.5 L356.84209,170.5" Opacity="0.35"/>

  <Path Width="1.662" Height="29.03" Fill="#FF3A3A3A" Stretch="Fill" Stroke="#FF000000" Canvas.Top="0.48" Canvas.Left="0.2" Data="M360,168 L360,0" Opacity="0.35" />

 

  <Path Width="357.84" Height="1" Fill="#FF3A3A3A" Stretch="Fill" Stroke="#FF000000" Canvas.Top="29" Data="M0,170.5 L356.84209,170.5" Opacity="0.35"/>

  <Path Width="358.85" Height="1" Fill="#FFA2A2A2" Stretch="Fill" Stroke="#FF000000" Canvas.Top="30" Data="M0,170.5 L356.84209,170.5" Opacity="0.25"/>

  <Path Width="1.662" Height="30" Fill="#FF3A3A3A" Stretch="Fill" Stroke="#FF000000" Canvas.Left="356.01" Data="M360,168 L360,0" Opacity="0.35" Canvas.Top="-0.498"/>

  <Path Width="1" Height="31" Fill="#FFA2A2A2" Stretch="Fill" Stroke="#FF000000" Canvas.Left="357.333" Data="M360,168 L360,0" Opacity="0.245" Canvas.Top="-0.498" />      

</Canvas>

</Canvas>

 

4. EloiSplashScreenTestPage.html 파일에서 아래 코드를 찾습니다.

<object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" ... (object 태그는 Silverlight 플러그인을 지정합니다.) object 태그 하위 param 태그를 아래와 같이 변경합니다.

<param name="source" value="ClientBin/SplashScreenSource.xap"/>

à

<param name="source" value="SplashScreenSource.xap"/>

파일을 저장하고 현재 파일은 계속 열어둡니다.

 

5. 솔루션 탐색기에서 EloiSplashScreen.xap 파일을 드래그하여 EloiSplashScreenWeb의 루트로 이동시킵니다.

 

사용자 삽입 이미지

6. 계속해서 EloiSplashScreenTestPage.html 파일에서 object 태그 하위에 아래 param 태그를 추가합니다. 이 태그들은 위에서 설명한 3가지 속성들입니다. 위로 이동하셔서 다시 한 번 내용을 확인해보시기 바랍니다.

  

<param name="splashscreensource" value="EloiSplashScreen.xaml"/>

<param name="onSourceDownloadProgressChanged" value="onSourceDownloadProgressChanged" />

 

7. 두 번 째 param 태그는 JavaScript 이벤트 핸들러를 참조합니다. 솔루션 탐색기에서 EloiSplashScreen.xaml 파일의 + 버튼을 클릭하여 하위 EloiSplashScreen.js 파일을 확인합니다. ( js 파일은 EloiSplashScreen.xaml 파일을 생성할 때 함께 생성된 파일입니다.)

 

8. EloiSplashScreen.js 파일을 열어 기존의 코드를 모두 삭제하고 아래 코드를 코딩합니다. onSourceDownloadProgressChanged 함수는 프로그레스 바를 업데이트하게 됩니다.

 

function onSourceDownloadProgressChanged(sender, eventArgs)

{

sender.findName("uxStatus").Text =  "Loading: " + Math.round((eventArgs.progress * 1000)) / 10 + "%";

sender.findName("uxProgressBar").ScaleY = eventArgs.progress * 356;

}

 

9. EloiSplashScreenTestPage.html 파일로 돌아가 EloiSplashScreen.js 파일을 참조하는 코드를 head 태그에 추가합니다.

 

<script type="text/javascript" src="EloiSplashScreen.js"></script>

 

 

10. 프로젝트를 빌드하고 컴파일을 확인합니다. EloiSplashScreenTestPage.html 파일이 로드되면 스플래시 스크린이 로드되고 Mission Success 텍스트가 나타날 것입니다.

 

사용자 삽입 이미지

Mission Success~!!!

다음 시간에는 Silverlight 데이터 컬렉션에 대해서 알아보도록 하겠습니다.

주위에서 감기 얘기가 조금씩 들리네요. 환절기 감기 조심하세요. ^.^

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
지난 수요일에 친할머니가 돌아가셔서 3일간의 상을 마치고, 집에 왔습니다.

삼일동안 접속할 수 없었던 블로그에 들어와 보니 짱묜님이 방명록에 글을 남겨 주셨습니다.
그래서 짱묜님의 블로그를 방문했습니다.
오~ 디자이너 관점에서 보는 실버라이트 강좌가 매우 내실있고, 간략 깔끔하게 잘 정리 되어 있었습니다.
개발자가 아닌 디자이너의 입장에서 실버라이트에 대해 꼼꼼하게 알고 싶다면 짱묜님의 사이트에서 많은 도움을 받을 수 있을 거라 생각됩니다.

한번 방문해 보세요.^^

짱묜님의 블로그 : http://zzangmyon.tistory.com/
크리에이티브 커먼즈 라이선스
Creative Commons License

'HCI & UX' 카테고리의 다른 글

HCI (1)  (0) 2009/04/17
Microsoft UX Platform and Tool Overview By Chris Bernard  (0) 2009/04/11
[블로그 소개] 짱묜님이 운영하는 실버라이트  (4) 2008/08/22
MS MED User Experience Workplace를 보아요~  (0) 2008/07/12
HCI 정리  (0) 2008/07/07
User Experience Architecture  (4) 2008/06/23
Posted by -세티-

원본: http://silverlight.net/Quickstarts/BuildUi/ControlEventHandlers.aspx

본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

 

안녕하세요. 엘리 입니다.

오늘은 지난 시간에 이어 Silverlight 입력 이벤트 핸들러 작성에 대해서 알아보도록 하겠습니다.

 

입력 이벤트와 라우트된 이벤트, 입력-특화 이벤트 데이터 (Input-Specific Event Data)

 

이번 시간에는 이전 시간에 소개한 CLR의 관리되는 코드에서 핸들링되는 이벤트와 XAML 파일의 엘리먼트 속성을 이용하여 참조하는 방법, 다른 이벤트 핸들러를 소개할 것입니다. 이전 시간에 만든 핸들러를 수정하여 Silverlight 입력이벤트에 특화된 중요한 두 개념을 설명을 할 것입니다. (입력-특화 이벤트 데이터는 말이 좀 이상할 수 있습니다. 영문을 함께 표기했으니 의미로 파악하시면 좀 더 나을 것 같습니다. ^.^*)

 

StackPanel에 핸들러 추가하기

1. Page.xaml 파일을 열어서 StackPanel 엘리먼트에 MouseLeftButtonDown 이벤트의 핸들러를 추가합니다. 핸들러 명명은 인텔리센스 항목의 새 이벤트 처리기를 선택하여 LayoutRoot_MouseLeftButtonDown으로 지정된 이름을 사용하세요.

 

2. Canvas 엘리먼트 뒤에 StackPanel 자식 엘리먼트로 아래의 엘리먼트를 추가합니다.

 

<TextBlock Name=”statusText”/>

 

 

3. 다음으로는 사용하는 언어에 따라 Page.xaml.cs 또는 Page.xaml.vb 파일을 열어 LayoutRoot_MouseLeftButtonDown 핸들러에 대한 아래 코드를 추가합니다.

 

FrameworkElement fe = e.Source as FrameworkElement;

StringBuilder sb = new StringBuilder(); //using System.Text; 를 선언한 후 사용합니다.

sb.Append(“source: “ + fe.Name + “\n”);

sb.Append(“relative x/y to source: “ + e.GetPosition(fe) + “\n”);

sb.Append(“Silverlight content area x/y : “ + e.GetPosition(null));

statusText.Text = sb.ToString();

 

4. 컴파일 후 응용 프로그램을 실행시킵니다. (F5 키 이용하시는 것 기억하고 계시죠? ^^)

Canvas 엘리먼트를 클릭하세요. 이전 시간에 실행했을 때와 같이 컬러가 변경되는 것을 확인하실 수 있습니다.

 

사용자 삽입 이미지

그러나 이 이벤트는 부모 엘리먼트인 StackPanel에 의해 핸들링 된 것이고 마우스 이벤트 데이터에서 발생한 정보가 TextBlock 엘리먼트에 표시된 것입니다. 이것은 라우트된 이벤트를 잘 설명해주고 있는 좋은 예입니다.

Canvas
엘리먼트에 의해서 이벤트가 발생한 것이지만 부모 엘리먼트인 StackPanel의 핸들러로 전달되어진 것입니다. 루트엘리먼트인 UserControl에 핸들러를 지정해두었다면, 그 이벤트는 또한 UserControl 엘리먼트로 전달되어졌을 것입니다. 위 그림을 보셔도 Canvas1 영역을 클릭했는데 해당 이벤트 결과인 Canvas1 영역의 컬러가 변경도 되었지만 StackPanel의 이벤트 결과인 source와 각 좌표 값이 나타난 것을 볼 수 있습니다.

 

모든 Silverlight 이벤트가 라우팅 습성을 가지지는 않고 불과 몇몇의 입력 이벤트들만 라우트 습성을 가지고 있습니다. 이런 라우트되는 이벤트들은 UIElement 기본 클래스에 의해서 정의된 것들이고 마우스나 키보드에 의해 발생한 입력 이벤트들입니다. UIElement에 의해 정의된 이벤트에 대해 좀 더 자세히 알고 싶으시면 SDK 참고 문서를 확인하시고 특별히 라우팅 습성을 가진 이벤트들을 주의 깊게 확인해보시기 바랍니다.

 

LayoutRoot_MouseLeftButtonDown은 이벤트 데이터로부터 Source의 값을 받습니다. 이것이 실제로 이벤트를 발생한 엘리먼트이고 이벤트가 라우팅될 때 이벤트를 처음으로 핸들링하게 됩니다. 그리고 가끔 TextBlock의 텍스트인 “Canvas1”이나 “Canvas2”를 클릭했을 때 Source의 이름이 나타나지 않는 경우가 있습니다. 이런 현상은 현재 TextBlock 엘리먼트에 이름을 주지 않았기 때문에 “Canvas1”이나 “Canvas2”를 클릭했을 때 StackPanel에 이름을 표시하지 않는 것입니다. 그래서 실제로는 StackPanel에 핸들러가 나타나기 전에 라우팅이 일어난 것입니다.

 

이것은 라우팅된 입력 이벤트의 가치와 목적을 설명하는 것입니다. 여러분이 UI를 만들 때, 기존 컨틀롤과 함께 코드를 만들어가는 경우와 사용자 컨트롤의 조합물을 정의할 때 조합물의 부분으로 핸들러를 작성해야할지 조합물을 포함하고 있는 부모에 대한 코드를 작성해야 할 지는 언제나 명확하지 않습니다. 이벤트 라우팅은 각각의 경우 또는 두 경우 모두 제공합니다.

 

또한 LayoutRoot_MouseLeftButtonDown은 특별히 이벤트 데이터 (마우스 이벤트가 발생한 곳의 X, Y 좌표를 알려주는 데이터)와 관련된 마우스 이벤트를 가장 유용하게 보여주는 예입니다. 좌표값은 GetPosistion에서 전달 받습니다. GetPosistion은 속성이 아닌 메서드인데, 좌표의 기준이 될 틀을 지정함으로써 관련된 좌표를 쉽게 알 수 있습니다.

 

사용자 삽입 이미지


전체 Silverlight 영역 내의 좌표를 얻기 위해서는 간단히 GetPositionnull 값을 주면 됩니다. 그외에 Silverlight 객체 트리에 연결된 어떤 엘리먼트도 지정해줄 수 있습니다. (이 것은 이벤트 라우트 경로에 직접적으로 포함된 객체일 필요는 없습니다.) 인자로 전달되는 대부분 일반적 객체는 이벤트 Source입니다. 그래서 핸들러가 부모 엘리먼트에서 처리되어도 마우스 이벤트가 발생한 객체의 상대적인 위치를 유지할 수 있습니다. 이외에 다른 방법들도 많이 있는데, 연관된 트랜스폼에 대해 정확히 프레임 객체에 대한 참조를 넘길 수도 있습니다.

 

이벤트 핸들러에서 Handled 사용하기

이벤트 라우팅은 아주 유용하지만 특정 입력 이벤트에만 라우팅되고 그 외에 다른 이벤트 핸들러에는 전달되지 않기를 원하는 경우가 있을 것입니다. 다행히 여러분은 라우팅되는 이전 시점에서 이미 다른 핸들러에 의해 호출되었던 사실을 보고할 수 있는 이벤트 핸들러를 작성할 수 있습니다. 이 것을 하기 위해 이벤트 데이터 내에 Handled의 값을 추가해야 합니다.

 

다음은 handler 로직에 Handled 추가하는 방법입니다.

 

1. Page.xaml.cs 또는 Page.xaml.vb 파일을 열어 LayoutRoot_MouseLeftButtonDown 핸들러에 Handledtrue로 설정합니다.

 

e.Handled = true;

FrameworkElement fe = e.Source as FrameworkElement;

StringBuilder sb = new StringBuilder();

sb.Append(“source: “ + fe.Naem + “\n”);

sb.Append(“relative x/y to source: “ + e.GetPosition(fe) + “\n”);

sb.Append(“Silverlight content area x/y: “ + e.GetPosition(null));

statusText.Text = sb.ToString();

//</SnippetStackPanelHandler>

 

2. 다음으로는 Canvas1_MouseLeftButtonDown 핸들러에 Handled true 값을 추가합니다. VisualBasic 예제에서 Canvas2_MouseLeftButtonDown 핸들러를 추가하였다면 동일하게 추가합니다. statusText의 값은 빈 칸으로 둡니다. (statusText에 값 지정 시 어떤 변화가 있는지는 아무 값을 넣어보고 컴파일 후 실행보시기 바랍니다.)

 

Void Canvas1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

   e.Handled = true;

   statusText.Text = “”;

   Canvas c = sender as Canvas;

   SolidColorBrush newColor = new SolidColorBrush(Color.FromArgb (255, 200, 77, 0));

   c.Background = newColor;

}

 

3. 컴파일 후 응용 프로그램을 실행합니다.

 

사용자 삽입 이미지

Canvas 엘리먼트를 클릭해보세요. 전에 실행했던 것처럼 컬러가 변경됩니다. 그러나 그 이벤트가 부모 엘리먼트인 StackPanel에 의해 핸들링되지는 않는다는 것을 알 수 있습니다. Canvas 핸들러가 실행되어진 후에 어떤 핸들러도 함께 라우팅이 되지 않았습니다. 이는 Handledtrue로 설정을 되었기 때문에 이벤트 라우팅이 이루어지지 않은 것입니다.

 

WPF (Windows Presentation Foundation)의 라우팅된 이벤트에 대해 잘 알고 있다면, 라우팅된 이벤트 시스템의 특성의 작은 차이점 있다는 것을 알 수 있을 것입니다. WPF에서는 이벤트 데이터를 Handled=true로 설정하면 대부분 핸들러를 호출되지 않게 할 수 있습니다. 그러나 “handleEventsToo” 핸들러는 Handled=true를 설정한 이벤트도 여전히 호출하게됩니다. Silverlight는 이와 비슷한 기술을 지원하지 않습니다. 이벤트 데이터를 Handled=true로 설정한 것은 항상 라우팅되지 않습니다.

 

키보드 이벤트 

키보드 이벤트도 라우팅된 이벤트입니다. 마우스 포인터 위치 X/Y 좌표 값을 전달하듯이 키보드 이벤트 데이터 키를 누르거나 키에서 손을 뗄 때 키의 특정 값을 전달합니다

 

키보드 이벤트는 또한 기능 키의 개념을 가지고 있습니다. 대부분 기능 키들은 SHIFT 키 또는 CTRL 키입니다. 일반적으로 다른 키와 동시에 기능 키를 누를 때 키보드 이벤트가 발생을 하게 됩니다.

 

여러분이 추가한 엘리먼트는 본래부터 포커스를 가지고 있지 않습니다. 탭 순서에 따라 멈출 수 있고 포커스를 얻을 수 있는 UI 컨트롤을 추가하고 싶을 것입니다. 컨트롤은 키보드 이벤트가 발생하기 위해서 포커스 되어져야할 것이지만 키 이벤트는 컨트롤 보다 하위 단계에 정의되어 있습니다. 그래서 panel 같이 포커스를 가질 수 없는 컨트롤이 아닌 것들도 라우팅을 통해 포거스를 핸들링 할 수 있습니다.

 

다음은 핸들러 로직에 Handled 추가하는 방법입니다.

 

1. Page.xaml.cs 또는 Page.xaml.vb 파일을 열어 LayoutRoot로 명명된 StackPanelKeyDown 이벤트 핸들러를 추가합니다. 인텔리센스를 사용하여 LayoutRoot_KeyDown 핸들러를 추가하여 아래 코드를 코딩합니다.

 

private void LayoutRoot_KeyDown(object sender, KeyEventArgs e)

{

    //check key value, we are looking for "G"

    if (e.Key == Key.G)

    {

        //check modifiers for Ctrl

        if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)

        {

            statusText.Text = "Beep!";

        }

    }

}

 

2. Page.xaml 파일에 두 번째 Canvas 엘리먼트와 TextBlock 엘리먼트 사이에 아래 코드를 코딩합니다.

 

<Button Content=”Hello” />

 

 

3. 컴파일 후 응용 프로그램을 실행시킵니다.

 

브라우저에서 탭 키를 누릅니다. 한 번 탭 키를 누르면 Silverlight 컨텐트 내에 포커스가 있는데, 유일하게 포커스가 가능한 엘리먼트는 버튼입니다. Hello 버튼이 포커스를 가지고 있는 동안 CTRL+G 키를 누르면 부모인 StackPanel로 이벤트가 라우팅 되고 그 핸들러는 statusText를 변경하게 됩니다.

 

참고

는 단지 포터블 키(이기종 플랫폼에서도 인식 가능한 키) 코드만 전달 가능합니다. 넌포터블 키(특정 기종 플랫폼에서만 인식 가능한 키 - SCROLL LOCK키는 Windows 플랫폼에서만 인식 가능) 코드는 허용되지 않습니다. 넌포터블 키 코드는 퀵스타트에서는 다루지 않습니다. 키보드 지원을 참고하시기 바랍니다.

 

참고 사항

 

벤트 개요

마우스 지원

키보드 지원


이 번 시간은 여기까지입니다. 다음 시간에는 Silverlight 응용 프로그램을 다운로드 받을 때 로딩되는 진행 상황 등을 알려주는 임시 (준비) 페이지 만들기에 대해서 알아보겠습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
원글출처 : http://silverlight.net/Quickstarts/BuildUi/ControlEventHandlers.aspx 
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하세요. 엘리 입니다.

8 4일부터 6일까지 부산으로 휴가를 다녀왔습니다. 친한 동생 집이 부산이라 2 3일 동안 아주 알차게 보내고 왔습니다. 부모님들께서도 너무 잘해주셔서 맛있는 것도 많이 먹고 차까지 빌려주셔서 편히 잘 쉬다 왔습니다. ^^*

해수욕을 할까 말까 하다가 해운대에서 결국 했는데, 직접 가보니 사람이 그렇게 많진 않고 정말 밤까지 시끌벅적 하더군요. 여러 사정으로 휴가 못 가시는 분들한테는 너무 죄송하지만 간만에 유유히 편히 쉬다 왔습니다. ^^;

 

오늘은 Silverlight 입력 이벤트에 대한 핸들러 작성에 대해서 알아보는 시간입니다. C# 이나 Visual Basic에서, 어셈블리로 컴파일되는 이벤트 핸들러를 작성하는 방법과 XAML 파일에서 이 것들을 참조하는 방법에 대해서 알아보겠습니다.

 

Silverlight 응용 프로그램 작성 시, XAML 파일은 C# 또는 Visual Basic을 이용하여 함께 작업이 가능합니다. 이 두 파일을 이용하여 프로그램을 작성한다면 보다 나은 Silverlight 응용 프로그램 개발을 할 수 있을 것입니다.

XAML (eXtensible Application Markup Language)
파일에선 응용 프로그램 대부분의 UI (User Interface)를 구현할 수 있고 관리 코드 (C# 또는 Visual Basic)를 사용하여 XAML을 동작하게 합니다.

그럼, 좀 더 자세히 알아보도록 하겠습니다.

 

Silverlight 기반 응용 프로그램 이벤트를 핸들러를 작성하는데는 아래와 같이 여러 방법들이 있습니다.

 

1. Silverlight 플러그 인에 의해 해석되고 브라우저의 스크립트 엔진으로 전달되는 JavaScript 핸들러를 작성할 수 있습니다.


2. IronPython
이나 관리되는 Jscript 같은 관리되는 코드로 지정한 동적 언어에 핸들러를 작성할 수 있습니다. 이 핸들러는 실행되기 전까지 컴파일이 되지 않습니다. 관리되는 코드 내 동적 언어를 위한 지원은 DLR (Dynamic Language Runtime)에 의해 제공되어 집니다. 좀 더 자세한 정보는 동적 언어로 Silverlight 프로그래밍을 참고하시기 바랍니다.


3. C#
이나 Visual Basic과 같은 관리되는 코드 언어에 핸들러를 작성할 수 있습니다. 핸들러를 참조하는 XAML 페이지와 이와 함께 컴파일 되는 코드 비하인드 파일로 이벤트 핸들러가 작성되어집니다.

 

여기서는 3번 째 방법을 설명을 할 것인데, XAML 파일에서 핸들러를 참조하여 C# 또는 Visual Basic 코드에 이벤트 핸들러를 작성하는 방법에 대해서 설명하고 어셈블리의 일부로서 코드 비하인드 파일과 XAML 파일을 컴파일 하는 것을 설명할 것입니다.

 

사전 준비 사항

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008용 Silverlight Tools 베타 2

 

먼저 Visual Studio 2008을 사용하여 Silverlight 프로젝트를 하나 만드시기 바랍니다. (참고: Silverlight 응용 프로그램 생성하기)

 

프로젝트와 기본 XAML 파일 생성하기

Visual Studio Silverlight 템플릿 기반 프로젝트는 디폴트 클래스와 네임스페이스를 포함하고 이와 함께 x:Class도 이미 선언되어져 있습니다.

 

다음은 프로젝트를 만들고 XAML 파일을 편집하는 절차입니다.

 

1. Silverlight 응용 프로그램 하기를 참고하여 Silverlight 응용 프로그램을 하나 만드시기 바랍니다. HTML 페이지를 호스팅하기 위해 옵션으로 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하시기 바랍니다. 프로젝트는 C#이나 Visual Basic을 선택할 수 있는데 선택에 따라 절차에 대한 설명이 달라질 것 입니다.

 

2. 기본 Silverlight 템플릿에서 만든 프로젝트를 보기 위해 솔루션 탐색기를 엽니다.

 

3. 다음으로 Page.xaml 파일을 여시기 바랍니다.

 

4. 루트 엘리먼트인 UserControlHeightWidth 속성이 정의되어 있다면 삭제합니다.

 

5. Grid 엘리먼트를 StackPanel 엘리먼트로 변경하고 Background 속성을 추가하시기 바랍니다. Grid 태그를 삭제하고 다음 코드를 붙여넣기 합니다.

<StackPanel x:Name=”LayoutRoot” Background=”OldLace”>

</StackPanel>


StackPanel
은 완성된 코드를 실행시킨 후 보시면 브라우저의 바탕이라고 보시면 됩니다.

   StackPanel을 포함한 레이아웃 컨트롤들에 대해서는 차후 설명하는 시간을 갖도록 하겠습니다.

사용자 삽입 이미지

6. UI 엘리먼트를 추가합니다. StackPanel의 자식 엘리먼트로 Canvas 엘리먼트를 추가합니다. StackPanel 태그 사이에 다음 XAML 코드를 자식 엘리먼트로 추가합니다. 참고로 아직 이벤트나 이벤트 핸들러는 선언하지 않은 상태입니다.


<Canvas x:Name=”Canvas1” Background=”DarkKhaki” Width=”100” Height=”30”>

   <TextBlock>Canvas1</TextBlock>

</Canvas>

 

7. Canvas 엘리먼트 속성으로 MouseLeftButtonDown을 입력하거나 타이핑 완성에 도움이 되는 인텔리센스 드롭다운 항목들을 선택하여 코딩합니다. 처음 입력하면 속성이 정의되지 않은 MouseLeftButtonDown=”” 상태로 표시될 것입니다. 속성에 대한 값은 추가로 UI 드롭다운 인텔리센스 항목을 통하여 보실 수 있습니다.

사용자 삽입 이미지

8. 인텔리센스 드롭다운 항목에 도움말을 보고 탭 키를 누릅니다. 이러면 Canvas1_MouseLeftButtonDown이라는 이벤트 핸들러를 정의하고 참조하게 됩니다. 이 이름은 변경하셔도 됩니다.


사용자 삽입 이미지

지금까지 작성한 XAML 파일은 다음과 같습니다.


<Canvas x:Name=”Canvas1” Background=”DarkKhaki” Width=”100” Height=”30“ MouseLeftButtonDown=”Canvas1_MouseLeftButtonDown”>

     <TextBlock>Canvas1</TextBlock>

</Canvas>

 

9. 현재 코드 비하인드 파일 (C# 또는 Visual Basic)의 이벤트 핸들러 코드는 비어 있습니다. 아직 컴파일은 하지 마시기 바랍니다. 이 코드는 다음 절차에서 코딩할 예정입니다.

 

핸들러 작성

 

XAML 페이지에서 참조하는 모든 이벤트 핸들러는 클래스 내에 정의되어야 하고 XAML 파일내 x:Class에 의해 선언된 어셈블리에 있어야 합니다. 코드 비하인드 파일 (C# 또는 Visual Basic)과 그 XAML 파일은 클래스 내 코드로 연결되어 있고 함께 컴파일 됩니다. 기본적으로 템플릿은 XAML 파일과 코드 비하인드 파일의 이름을 동일하게 만들고 프로젝트 내에서 XAML의 의존적 파일로서 코드 비하인드 파일이 함께 생성됩니다. 예를 들어, Page.xaml 파일을 만들었다면 코드 비하인드 파일은 여러분이 사용하는 언어에 따라 Page.xaml.cs 또는 Page.xaml.vb로 만들어졌을 것입니다. 그리고 코드 비하인드 파일은 단지 바로 아래 위치되어 있습니다. (처음 코드 비하인드 파일을 볼 수 없다면 솔루션 탐색기 내 Page.xaml의 왼쪽 +를 클릭해보세요.)

 

다음은 관리되는 코드 파일 내 이벤트 핸들러를 정의하는 방법입니다.

 

1. Page.xaml.cs 또는 Page.xaml.vb 파일을 편집하기 위해 엽니다.

C# 이라면, 프로젝트 템플릿에 따라 네임스페이스와 클래스가 정의됩니다. Visual Basic이라면, 클래스는 정의 되고 네임스페이스는 프로젝트의 기본 네임스페이스에 의해 지정됩니다.

 

2. Page 클래스의 멤버로서 정의된 Canvas1_MouseLeftButtonDown 빈 핸들러를 찾아보세요. 이 빈 핸들러는 이 전 절차에서 인텔리센스를 통해 TAB 키를 눌렀을 때 생성된 것입니다. XAML 파일의 Canvas 엘리먼트 참조를 하기 위해 sender 파라미터를 사용하는 핸들러 작성해보겠습니다. XAML 파일에 정의된 기본 값을 SolidColorBrush를 사용하여 변경해봅니다. 각 언어에 맞게 아래 코드를 보시기 바랍니다.

 

CS

private void Canvas1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

   Canvas c = sender as Canvas;

   SolidColorBrush newColor = new SolidColorBrush(Color.FromArgb(255, 200, 77, 0));

   c.Background = newColor;

}

 

VB

Private Sub Canvas1_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)

    Dim c As Canvas = sender

    Dim newColor As SolidColorBrush = New SolidColorBrush(Color.FromArgb(255, 200, 77, 0))

    c.Background = newColor

End Sub

 

3. 응용 프로그램을 컴파일하고 실행해보세요. (F5 키를 사용하여 디버그 상태로 컴파일하고 실행시킵니다.) HTML 페이지와 Silverlight 컨텐츠가 로드될 것입니다. 그럼, Canvas1 부분을 클릭해보세요. 컬러가 변경되는 것을 확인하실 수 있을 것입니다.

 

참고

만약 Silverlight 관리되는 이벤트가 EventArgs/RoutedEventArgs로부터 상속된 클래스를 사용하거나 다른 이벤트 핸들러에서 발생한 이벤트 데이터를 사용하지 않는다면 일반적으로 EventHandlerRoutedEventHandler를 사용합니다. MouseLeftButtonDown 이벤트는 마우스와 관련된 이벤트의 데이터를 전달해주고 MouseEventHandler 델리게이트를 사용합니다.

 

코드에 이벤트 핸들러 추가하기

 

일반적으로 XAML 코드에 이벤트 핸들러를 추가하는 것이 편리하지만 CLR (Common Language Runtime) 코드에 CLR 구문을 사용하여 추가할 수도 있습니다. 예를 들어, 사용 언어가 C#이라면, +=로 이벤트 핸들러를 추가할 수 있습니다. 다음 절차는 Loaded 이벤트 핸들러를 추가하기 위해 클래스 생성자를 사용한 것 입니다. Loaded 이벤트 핸들러는 기존의 Canvas1_MouseLeftButtonDown 핸들러를 다른 CanvasMouseLeftButtonDown 이벤트에 추가할 것 입니다.

 

아래의 방법으로 XAML 파일과 관리되는 코드를 편집합니다.

 

1. Page.xaml 파일을 편집합니다. Canvas 엘리먼트 뒤에 핸들러를 제외한 Canvas를 하나를 추가합니다. Canvas와 구별하기 위해 Background 속성 값을 다르게 지정합니다.


<Canvas x:Name=”Canvas2” Background=”Orchid” Width=”100” Height=”30”>

   <TextBlock>Canvas2</TextBlock>

</Canvas>


2. Page.xaml.cs 파일을 편집합니다. Page 클래스 생성자 내 InitializeComponent 다음에 Loaded 이벤트 핸들러를 추가합니다. (다음 단계에서 새로운 핸들러를 정의할 것 입니다. 또한 C#에서 +=를 입력하면 인텔리센스가 제공하는 여러 옵션들을 보게 될 것입니다. 그리고 다음 단계를 시작하는데 Page_Loaded의 뼈대를 잡아줄 것입니다.)

 

CS

public Page()

{

   InitializeComponent();

   this.Loaded += new RoutedEventHandler(Page_Loaded);

}


사용자 삽입 이미지

3. Canvas2 MouseLeftButtonDown 이벤트를 참조하는 Page_Loaded 핸들러를 정의합니다. 그리고 Canvas1_MouseLeftButtonDown 핸들러를 추가하세요.

 

CS

void Page_Loaded(object sender, RoutedEventArgs e)

{

   Canvas2.MouseLeftButtonDown += new MouseButtonEventHandler(Canvas1_MouseLeftButtonDown);

}

 

VB

Sub Page_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)

   AddHandler Canvas2.MouseLeftButtonDown, AddressOf Canvas1_MouseLeftButtonDown

End Sub

 

4. 파일을 저장하고 컴파일 한 후 응용 프로그램을 실행시킵니다. Canvas2 영역을 클릭했을 때 컬러가 변경되는 것을 확인하실 수 있습니다.

 

사용자 삽입 이미지
                                        ▽

사용자 삽입 이미지

Handles를 사용하여 Visual Basic에서 이벤트 핸들러 추가하기

 

Visual BasicWithEventsHandles 키워드를 사용하여 핸들러를 추가하는 또 다른 구문이 있습니다. XAML 코드에서 만들어져 명명된 엘리먼트의 경우 WithEvents 키워드를 사용할 수 없습니다. Silverlight Visual Studio 프로젝트에서 WithEvents 키워드는 추가되고, 명명된 XAML 엘리먼트에 접근하기 위해 참조되어지고 기본적으로 생성됩니다. Handles 구문은 유일하게 x:Name 엘리먼트가 추가되어졌을 때 작동됩니다. Handles를 선언했을 때 x:Name의 값은 인스턴스를 참조하게 됩니다.

 

XAML 파일 편집과 이벤트 핸들러 Handles 키워드를 사용하기

 

1. Page.xaml 파일을 편집합니다. 버튼처럼 보이는 첫 번 째 Canvas 다음에 이벤트 핸들러가 제외된 Canvas를 하나를 추가합니다.

 

VB

<Canvas x:Name="Canvas2" Background="Orchid" Width="100" Height="30">

  <TextBlock>Canvas2</TextBlock>

</Canvas>

 

2. Page.xaml.vb 파일을 편집합니다. 첫 번째 것과 같은 이벤트 핸들러를 추가합니다. (Canvas1_MouseLeftButtonDown을 복사하여 Canvas2_MouseLeftButtonDown으로 이름을 변경하겠습니다.) 이 번에는 Canvas2 인스턴스를 위한 MouseLeftButtonDown 이벤트 핸들러 지정을 위해 Handles 키워드를 사용합니다.

 

Private Sub Canvas2_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Canvas2.MouseLeftButtonDown

        Dim c As Canvas = sender

        Dim newColor As SolidColorBrush = New SolidColorBrush(Color.FromArgb(255, 200, 77, 0))

        c.Background = newColor

    End Sub


참고

먼저 x:Name=”Canvas1” 같은 속성 값을 가진 Canvas를 만들어놓고 기능적으로나 코드 면에서완전 동일한 핸들러를 구현하고자 한다면 핸들러는 다른 인스턴스에 핸들러 역할도 할 수 있습니다.

… Handles Canvas1.MouseLeftButtonDown, Canvas2.MouseLeftButtonDown.

이렇게 구현한다면 XAML 파일 Canvas1 엘리먼트의 MouseLeftButtonDown 이벤트 속성을 삭제하여도 됩니다.

 

핸들러 사용 시, XAML 파일에 속성을 추가하여 사용하거나 Handles 구문을 사용하는 것은 각 이벤트에 상호 독립적입니다. 응용 프로그램의 일관성을 유지하기 위해 XAML 파일에서 핸들러를 지정할 지, 코드 비하인드 파일에서 지정할 지 결정을 해야 합니다. Handles를 사용한다면 Silverlight가 라우트된 이벤트를 지원하게 됩니다. 이 것에 대해서는 뒤에서 좀 더 자세히 다루게 될 것입니다. 라우트된 이벤트를 사용하면 객체 트리에서 실제로 발생한 객체가 아닌 다른 객체에서 라우트된 이벤트 핸들러를 추가할 수 있습니다.

 

이 번 시간은 여기까지입니다. 다음 시간은 계속 해서 Silverlight 입력 핸들러 작성에 대해서 알아보도록 하겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원글출처 : http://silverlight.net/quickstarts/blend_quickstart/part5_working_with_media.aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하세요. ^^
모두 휴가는 잘 다녀오셨는지 궁금합니다.

음... 전 아직 휴가를 갔다오지 못했습니다. 바뻐서 그랬던 것은 아니구요. 휴가 때 밖으로 나가면 꽤 번잡하잖아요? ㅎㅎ 전 그게 싫어서 좀 한가할 때 갈려고 기회를 엿보고 있는 중입니다. ^^

그나저나 날씨가 요즘 너무 더워요..헥헥. 무더운 날씨에 지치지 않을려고 이것저것 막 챙겨먹고는 있는데 그것들이 체력 보강으로 이어지진 않고, 뱃살로 이어지고 있습니다. 이일을 어찌해야 좋을지 막막한 요즘입니다. ^^;

늘어나는 뱃살과 먹는 것의 즐거움을 알아버린 세티지만 무더운 더위에 지치지 않고 글을 쓸수 있는 즐거움도 함께 가져갈려고 노력하고 있습니다.^^*

아무튼 힘내서 이번 시간에는 Blend2.5를 이용한 미디어 플레이어 만들기를 해보겠습니다.

먼저 미디어 플레이어를 만들기 위해서 WMV 동영상 파일이 하나 있어야 합니다.
WMV파일 구하러 검색하는 것도 일인데 그냥 아래의 주소에서 편하게 다운로드 받으시면 됩니다.^^
http://www.microsoft.com/windows/windowsmedia/musicandvideo/hdvideo/contentshowcase.aspx

위에서 다운로드 받은 동영상을 이제 추가해야 합니다. 어디에 추가하냐구요?

미디어 플레이어를 만들기 위해 새로운 프로젝트를 하나 생성할까 합니다.
새로운 미디어 플레이어를 위한 프로젝트의 이름을 MediaPlayer 라고 하겠습니다.

프로젝트를 생성하셨다면 이제 Canvas 가 필요합니다.
Object and Timeline에서 Canvas 객체를 추가합니다.
자. 다 만드셨죠? 그럼 이제 동영상을 추가해 보겠습니다.

동영상은 솔루션 탐색기에 필요한 동영상 리소스를 추가하고, 캔버스 객체에 마우스로 드래그해서 옮겨 놓으면 됩니다. 동영상 파일의 추가는 아래의 그림처럼 마우스로 동영상을 드래그 해서 놓아도 되고, Blend 2.5 상단 메뉴에 있는 Project를 선택한 후 Add Existing Item...이라는 메뉴를 선택해서 등록해도 됩니다.

사용자 삽입 이미지

이것도 귀찮다면 단축키 Ctrl + I 를 이용하면 됩니다.^^

미디어 파일을 추가하고 나면 아래의 이미지 처럼 Project 판넬에 추가된 영상이 표시됩니다.(이미지도 이것과 같은 방법으로 추가할 수 있습니다.)
사용자 삽입 이미지

다음으로 지난 포스트에서 생성했던 버튼 컨트롤을 추가합니다.
Play, Stop, Pause 버튼을 빌드하고 나면 프로젝트가 있는 하위 bin 폴더에 dll 파일이 생성되어 있습니다.
그것을 참조추가하여 버튼 컨트롤을 사용할 수 있습니다.
참조추가 하는 방법은 아래의 그림처럼 하시면 됩니다.
사용자 삽입 이미지
(마우스 우클릭하여 참조추가하기)

사용자 삽입 이미지
(이전 포스트에서 만든 컨트롤을 빌드하면 나오는 dll 파일)


이제 추가된 dll에서 가져올 사용자 컨트롤이 모두 있는지 확인해보겠습니다.
아래의 첨부된 이미지에서 처럼 자산 라이브러리[ >> ]를 클릭하면 모든 사용자 컨트롤이 확인 가능합니다.
사용자 삽입 이미지

확인된 버튼 사용자 컨트롤을 더블 클릭을 하여 모두 추가합니다.
사용자 삽입 이미지

이제 미디어 플레이어를 만들기 위한 기본적인 준비가 완료되었습니다.

여기서 우리가 한가지 알아야 할 것이 있는데요. 현재는 하나의 프로젝트 내에 캔버스, 버튼 사용자 컨트롤, 동영상 파일과 같은 것들이 모두 각각의 객체의 형태로 존재하고 있습니다.

미디어플레이어에서는 이것들을 하나의 유닛으로 만들어야 할 필요가 있습니다.
그래서 캔버스 아래에 모든 객체들을 묶어 놓아야 합니다. 그러기 위해선 이것들을 그룹화 시켜야 합니다.
그룹화 하는 방법은 아래의 그림처럼 Group Into(그룹으로 묶기)로 합니다.

사용자 삽입 이미지

아래의 그림은 그룹화가 잘 되었을 때 보여지는 ArtBoard의 캡쳐 이미지 입니다.
사용자 삽입 이미지

이제 버튼 컨트롤에 따라 영상이 움직이도록 할 차례 입니다.
미디어를 추가하면 자동으로 MediaElement 엘리먼트가 생성됩니다. 그리고 MediaElement는 동영상의 플레이 스타일을 Auto로 가지게 됩니다. 우리는 여기서 버튼을 클릭했을 때 동영상이 플레이되도록 할 것이므로 MediaElement에 하나의 속성을 추가할 것입니다.

아래의 그림에서 처럼 MediaElementLoadedBehavior 속성값으로 Stop을 설정합니다.
사용자 삽입 이미지

원래 원문을 살펴보면 MediaElementAutoPlay의 속성값으로 False를 넣으라고 되어 있는데 Blend 2.5에서 해당 속성을 찾을 수 없었습니다.
사용자 삽입 이미지
(미디어엘리먼트에 설정 가능한 속성들)

자아. 아무튼 계속 진행합니다.
이제 각각의 버튼 사용자 컨트롤에 이벤트를 연결해야 합니다. 마우스의 왼쪽 버튼이 해당 버튼을 클릭하였을 때 동작하는 이벤트의 이름을 MouseLeftButtonDown 속성값에 넣어줍니다. 아래의 그림 처럼 말이지요.

사용자 삽입 이미지

자 이제 C# 파일에 이벤트 메서드를 추가만 해주면 끝나게 됩니다.

사용자 삽입 이미지

이제 미디어 플레이어 실행을 위한 준비가 모두 마무리 되었습니다.
F5키를 클릭하여 미디어의 동작 여부를 확인하는 부분은 각자 개인에게 맡기겠습니다.

이상으로 Blend 2.5를 이용한 실버라이트 애플리케이션 개발에 대해 간략하게 알아보았습니다.
좋은 하루 되십시오.^^
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

원글출처 : http://silverlight.net/Quickstarts/Start/18660837-4a10-462b-bf6e-723b36748ec3.aspx
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.



안녕하세요. 엘리 입니다.^^


올 해 여름도 태풍이 조용히 지나가질 않는군요.

가족들, 주위 분들 태풍 피해가 없는지 걱정입니다. 피해 없이 모든 분들이 즐거운 여름 되시길 진심으로 바랍니다.

이 번 시간은 VisualStudio에 있는 Silverlight 디자이너 미리보기 창에 대한 설명입니다.

XAML 파일을 편집하면 바로 미리보기 창에서 수정한 부분이 적용이 되어 나타나게 됩니다.

이는 파일을 저장하지 않아도 솔루션을 빌드하지 않아도 적용됩니다. (, 코드 오류 시 적용되지 않습니다.)

사용자 삽입 이미지

위 코드는 Silverlight 응용 프로그램 만들기 시간에 만든 Page.xaml 파일입니다.
저와 같은 이름으로 솔루션을 만드셨다면 Visual Studio 2008을 실행한 후 EloiSilverlightApp 솔루션 내 Page.xaml 파일을 열어 보시기 바랍니다.

그 후 위 코드에서 빨간 상자로 하이라이트 된 부분을 각각 Width 100으로 Height 50으로 Background RoyalBlue로 변경해보도록 하겠습니다.

사용자 삽입 이미지

미리보기 창을 보면 위와 같이 크기와 색이 변경된 것을 확인하실 수 있습니다.
참고로 처음 코드는 Width 400, Height 300, Background White였습니다. ^.^

그럼 좀 더 자세히 Silverlight 미리보기 창 기능에 대해서 알아보겠습니다.

Silverlight 미리보기 창
Visual Studio 2008 Silverlight Tools 베타 2 Silverlight 2 베타 2 응용 프로그램 생성을 위한 도구입니다. Visual Studio 2008 Silverlight 미리보기 창은 WPF 디자이너 기능 일부를 가지고 있습니다.

 

지원 기능

다음은 Silverlight 2 베타 2 프로젝트의 Silverlight 미리보기 창에서 지원되는 기능들입니다.

 

1. 모든 XAML 편집 기능: 인텔리센스와 XAML 포맷팅 기능은 WPF 형식 대신 Silverlight 2 베타 2 형식이 표시된다는 것을 제외하고 WPF 디자이너의 XAML 편집 기능과 같습니다.


2.
읽기 전용 위지윅 (WYSIWYG) 미리보기 기능: 실행 전 미리보기 작업이 가능하고 확대, 축소가 가능합니다.

사용자 삽입 이미지

3.
분리된 미리보기 창과 XAML 코드 창

4. Silverlight 2
베타 2 컨트롤과 해당 아이콘들 도구 상자에 표시:  Silverlight 2 베타 2 컨트롤들은 도구 상자 탭에 마우스 오버 시 플라이 아웃 되어 알파벳 순으로 표시됩니다.

사용자 삽입 이미지

5.
도구 상자 컨트롤 XAML 코드 창으로 드래그 앤 드롭 기능: 컨트롤 추가 시 참조와 XML 네임스페이스가 자동으로 추가됩니다.

6. XAML
코드 편집 시 문서 개요 창과 태그 검색 기능: 문서 개요 창(CTRL+ALT+T) XAML 코드의 구조를 보여주고 검색 기능(CTRL+F)은 코드 내 문자를 검색합니다.

사용자 삽입 이미지
(메뉴 바 보기 - 문서 개요를 클릭하셔도 됩니다.)


7. .cs
또는 .vb 코드와 xaml 코드 상호 연동 기능


8. XAML
코드 창과 다른 WPF 사이 자동 업데이트 기능


9.
디자이너 컴포넌트 지원 기능


10.
에러 목록 창에 에러 표시 기능: XAML 코드가 에러가 있으면 올바른 코드 입력 전까지 마지막으로 나타난 화면이 표시되고 알림 메시지가 표시됩니다.

사용자 삽입 이미지

알림 메시지 내용:
(디자이너를 업데이트하려면 우선 문서에 있는 오류를 수정해야 합니다. 오류 목록을 열려면 여기를 클릭하십시오.)


11.
미리보기 창 위치 조정 기능: XAML 코드 창을 기준하여 가로 분할 (기본 설정), 세로 분할이 가능하며 창을 축소할 수도 있습니다.

사용자 삽입 이미지
차례대로 세로 분할, 가로 분할 (기본 설정), 창 축소 아이콘


미 지원 기능
다음은 Silverlight 2 베타 2 프로젝트에서 Silverlight 디자이너 미리보기 창에서 지원되지 않는 기능들입니다.

 

1. 미리보기 창에서 편집 불가: 도구 상자에서 컨트롤의 선택 및 이동, 항목 추가 기능은 지원되지 않습니다.


2.
속성 창 미 지원: 속성을 편집할 수 없습니다.

사용자 삽입 이미지

3.
전역화 (국제화) 기능 미 지원:
전역화 (globalization)에 대해서 자세히 알고 싶으시면 아래 링크를 참고하시기 바랍니다.
http://msdn.microsoft.com/ko-kr/library/ms227427(VS.80).aspx 


4. 리소스 동적 새로 고침 기능 미 지원:
리소스가 변경되면 재 빌드 전까지 XAML 코드는 새로 고침 되지 않습니다.


참고 사항
    Silverlight 개발 시작하기

이 번 시간은 여기 까지입니다.
7월도 끝나가네요. 비 피해 없이 여름 건강하게 보내시기 바랍니다.
음식 조심하시고 맛 있는 음식 많이 드시구요
. ^________^

다음 시간에는 개체 브라우저 어셈블리 탐색에 대해서 알아보겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-

안녕하셨어요?
요즘 너무 더워서 점심을 거르는 날이 있는데 오늘은 비가 와서 시원하네요.
어렸을 때는 참 비가 싫었는데, 소풍 가는 날 비 오고 운동회 날 비 오고…^^;
그런데 요즘은 비가 오면 시원해서 좋네요. 빗 소리도 좋아지고요. 비 그친 후 맑은 하늘도 깨끗해서 좋구요.
오늘은 Silverlight 클래스 라이브러리 만들기에 대해서 알아보는 시간입니다.

Silverlight
클래스 라이브러리 만들기
Visual Studio 2008 Silverlight Tools 베타 2를 설치한 Visual Studio 2008 Silverlight 2 기반의 관리되는 클래스 라이브러리를 만들 수 있는 프로젝트 템플릿 (C# Visual Basic)을 포함하고 있습니다. 프로젝트 템플릿에는 기본 설정과 Silverlight 기반 클래스 라이브러리 코드 파일들을 포함하고 있습니다.

이제부터 Visual Studio 프로젝트 템플릿을 사용하여 Silverlight 기반 클래스 라이브러리 솔루션을 만드는 방법과 함께 생성되는 프로젝트 기본 설정과 파일들에 대해서 알아보도록 하겠습니다.

다음은 개발 전 설치해야하는 도구들입니다. 각각 링크된 페이지로 가셔서 다운로드 후 설치하시기 바랍니다.
- Silverlight 2 베타 2
- Visual Studio 2008 (90일 평가판)
- Visual Studio 2008용 Silverlight Tools 베타 2

이 전 글을 보시고 설치하신 분은 그냥 넘어가시면 됩니다. ^^
 

Visual Studio를 사용하여 Silverlight 기반 클래스 라이브러리 솔루션 만들기
Silverlight
클래스 라이브러리 프로젝트 템플릿을 사용하여 Silverlight 기반 클래스 라이브러리 솔루션을 만들어 보겠습니다.

1. Visual Studio 2008
을 시작합니다.

사용자 삽입 이미지

2. 파일 - 새 프로젝트를 차례로 클릭합니다.
사용자 삽입 이미지

그러면 아래와 그림과 같이 새 프로젝트 대화 상자가 열립니다.
사용자 삽입 이미지

3. 프로젝트 형식 창에서 Visual C# 또는 Visual Basic을 확장하고 Silverlight 프로젝트 형식을 선택합니다.
4. 템플릿 목록에서 Silverlight 클래스 라이브러리를 선택합니다.
5. 이름 텍스트 박스에 여러분들이 원하는 클래스 라이브러리 이름을 입력합니다.
6. 확인을 클릭하면 솔루션이 생성됩니다.
사용자 삽입 이미지

Silverlight
클래스 라이브러리 프로젝트 템플릿으로 만든 솔루션은 Silverlight 기반 클래스 라이브러리 프로젝트 한 개를 포함하고 있습니다.

Silverlight
기반 응용 프로그램 클래스 라이브러리 항목
Silverlight
기반 클래스 라이브러리 프로젝트는 설정 (configuration)과 어셈블리 참조 (assembly references), 최소한의 Silverlight 기반 클래스 라이브러리를 빌드하는데 필요한 코드 파일들을 포함하고 있습니다.

중요
Silverlight 기반 클래스 라이브러리 핵심 내용들을 이해하기 위해 Silverlight 라이브러리 어셈블리 개발 페이지를 참고하시기 바랍니다.

설정
생성된 Silverlight 기반 클래스 라이브러리 프로젝트의 중요 설정 사항들은 다음과 같습니다.
Visual Studio 상단의 프로젝트 메뉴에서 클래스 라이브러리 속성을 클릭하거나 솔루션 탐색기에서 클래스 라이브러리 이름을 마우스 우측 버튼 메뉴를 이용하여 속성을 클릭하시기 바랍니다.
사용자 삽입 이미지

-
아래 이름들은 Silverlight 기반 클래스 라이브러리 솔루션 생성 시, 새 프로젝트 대화 상자에서 이름 텍스트 박스에 입력했던 값과 연관됩니다.
- 프로젝트 이름
-
프로젝트가 빌드될 때 생성되는 어셈블리 이름
 -
생성된 어셈블리의 기본 네임스페이스
-
어셈블리에 포함된 이름과 버전 메타데이터

이름과 버전 메타데이터는 AssemblyInfo.cs 또는 AssemblyInfo.vb에 저장됩니다.

어셈블리 참조 (Assembly References)
Silverlight 기반 클래스 라이브러리 프로젝트는 Silverlight 2와 관련된 필수적인 다음 어셈블리를 포함합니다.
- mscorlib.dll
- System.dll
- System.Windows.dll 

또한 다음은 일반적 응용 프로그램 기능을 위해 포함된 어셈블리입니다.
 - System.Core.dll
- System.Net.dll
- System.Windows.Browser.dll
- System.Xml.dll

참조하는 어셈블리는 솔루션 탐색기에서 프로젝트 참조에서 확인하실 수 있습니다.

사용자 삽입 이미지


코드 파일
생성된 Silverlight 기반 클래스 라이브러리 프로젝트는 Class1이라는 클래스 파일 한 개를 가지고 있습니다.


클래스와 사용자 컨트롤 추가하기
Silverlight 프로젝트에 클래스를 추가하려면 차례로 추가 - 새 항목을 선택 후 다음 화면 새 항목 추가 화면 템플릿 창에서 클래스를 선택합니다. (바로 추가 새 항목 클래스를 선택하셔도 같은 창이 열립니다.) 그러면 빈 클래스가 하나가 추가될 것입니다.

사용자 삽입 이미지
사용자 삽입 이미지

기존 Silverlight 프로젝트에 사용자 컨트롤을 추가하기 위해 솔루션 탐색기프로젝트에서 마우스 우측 버튼 클릭하여 차례로 추가, 새 항목을 클릭하고 새 항목 추가 창에서 Silverlight 사용자 컨트롤을 선택합니다. 생성된 사용자 컨트롤은 Page 클래스처럼 XAML 마크업 파일과 코드 비하인드 파일로 만들어집니다. 사용자 컨트롤 .xaml 파일과 .cs 파일을 사용하여 클래스를 구현하는 방법의 좀 더 자세한 정보는 코드 비하인드와 부분 클래스 (Silverlight 2)를 참고하시기 바랍니다. 일반적으로 메인 응용 프로그램 UI 구현을 위해 응용 프로그램에서는 메인 사용자 컨트롤인 Page를 사용합니다. Page 사용자 컨트롤은 추가적으로 사용자 컨트롤을 포함하여 여러 요소들로 구성되어집니다. 그리고 응용 프로그램 네비게이션 모델이 Page 사용자 컨트롤을 사용할 경우 자식 사용자 컨트롤의 메인 UI를 변경하여 페이지 이동을 할 수 있습니다.

오늘은 여기서 마무리하도록 하겠습니다.

다음 시간에는 Silverlight 디자이너 미리보기에 대해서 함께 알아보도록 하겠습니다.
행복한 일 가득하시길 바랍니다. ^___________^*

 

참고 사이트

응용 프로그램 개발 개요

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
원글출처:http://silverlight.net/Quickstarts/Start/65f7a50a-9858-4425-8b6f-1993e5ab0236.aspx
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하셨어요?
휴가 계획은 잡으셨는지 궁금합니다. 저는 회사에서 휴가 계획을 제출하라고 해서 일단 7월 말로 제출하긴 했는데, 언제 갈 지는 모르겠네요. ^.^

 요즘 저는 다보스 리포트 힘의 이동 이라는 책을 읽고 있습니다. 이 책은 2007년 다보스 포럼 (정식 명칭: 세계 경제 포럼)에서 나온 안건들을 소개한 내용입니다. 다보스 포럼은 매년 스위스 다보스에서 2,000명이 넘는 경제인과 정치인, 미디어, 학자, 등이 참석하여 세계 경제의 주요 관심사를 논의하는 모임입니다.

 이 책에서 관심 있는 분야 중에 하나는 웹 2.0에 대해서 준비하고 분석하고 있다는 것입니다. 2.0과 함께 거론되는 RIA (Rich Interactive Application) 그리고 RIA와 함께 거론되는 Silverlight…^.^
세계 글로벌 리더들도 미래의 세상을 예견하면서 웹 2.0에 대해서 논의했듯이 우리도 열심히 공부하자는 의미에서 몇 자 적었습니다. (아흐~썰렁한 결말 --)

그럼 오늘은 두 번 째 시간으로 실제 Silverlight 개발에 들어가보도록 하겠습니다.

Silverlight 응용 프로그램 만들기

Visual Studio 2008 Silverlight 2 기반 응용 프로그램을 개발하기 위해선 Visual Studio 2008용 Silverlight Tools 베타 2를 설치해야 합니다. 이 도구에는 C# Visual Basic Silverlight 프로젝트 템플릿을 포함하고 있습니다. Visual Studio 프로젝트 템플릿을 사용하여 Silverlight 응용 프로그램 솔루션을 만드는 방법솔루션 생성시 기본 설정과 기본적으로 생성되는 파일에 대해서 함께 알아보도록 하겠습니다.

다음은 개발 전 설치해야하는 도구들입니다. 각각 링크된 페이지로 가셔서 다운로드 후 설치하시기 바랍니다.
- Silverlight 2 베타 2
-
Visual Studio 2008 (90
일 평가판)
- Visual Studio 2008용 Silverlight Tools 베타 2


Visual Studio
를 사용한 Silverlight 기반 응용 프로그램 솔루션 만들기
아래 제시한 단계를 따라 Silverlight 응용 프로그램 프로젝트 템플릿을 사용하여 Silverlight 기반 응용 프로그램 솔루션을 만들어 보겠습니다.

1. 아래의 그림처럼 매뉴에서 Visual Studio 2008
시작합니다.

사용자 삽입 이미지

2. 파일 새 프로젝트를 차례로 클릭합니다. .
사용자 삽입 이미지

그러면 아래 그림과 같이 새 프로젝트 대화 상자가 열립니다
사용자 삽입 이미지

3.
새 프로젝트
대화 상자에서 Visual C#이나 Visual Basic을 확장하고 Silverlight 프로젝트를 선택합니다.

4.
템플릿
목록에서 Silverlight 응용 프로그램을 선택합니다.

5.
이름 텍스트 박스에 응용 프로그램 이름을 입력합니다.
저는 EloiSilverlightApp로 입력하였습니다. 여러분들이 원하시는 것으로 입력하시기 바랍니다. ^.^

6.
확인
을 클릭하면 Silverlight 응용 프로그램 추가 대화 상자가 열립니다.
사용자 삽입 이미지

7. Silverlight 응용 프로그램 호스팅 방법을 선택합니다.
- 솔루션에 Silverlight 응용 프로그램과 ASP.NET 웹 사이트를 구분해서 구성하고자 한다면 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하고 프로젝트 형식과 이름을 추가로 입력합니다.
- 프로젝트에 Silverlight 기반 응용 프로그램을 호스팅할 단일 HTML 페이지를 구성하고자 한다면 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택합니다.

8.
확인
을 클릭하고 솔루션을 생성합니다.

Visual Studio 프로젝트 템플릿의 Silverlight 응용 프로그램으로 만들어진 솔루션에는 다음 사항들이 포함됩니다.
- 하나의 Silverlight 기반 응용 프로그램 프로젝트
- 하나의 웹 사이트 (Silverlight 응용 프로그램 추가 대화 상자에서 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택했을 시)

사용자 삽입 이미지

Silverlight
기반 응용 프로그램 프로젝트 항목

Silverlight 기반 응용 프로그램 프로젝트는 설정 (configuration)과 어셈블리 참조 (assembly references), 그리고 응용 프로그램을 빌드하고 실행할 수 있는 최소한의 코드 파일들이 포함되어 있습니다.

사용자 삽입 이미지

설정 (Configuration)
다음은 Silverlight 기반 응용 프로그램 프로젝트 생성시 설정되는 중요한 항목들입니다.
- 이 내용은 솔루션 탐색기에서 Silverlight 응용 프로그램 (프로젝트 이름)속성을 클릭하면 확인할 수 있습니다. 아래 그림을 참고하시기 바랍니다.
- 프로젝트 이름
- 프로젝트가 빌드될 때 생성되는 어셈블리 이름
- 생성된 어셈블리의 기본 네임 스페이스
- 프로젝트가 빌드될 때 생성되는 Silverlight 기반 응용 프로그램 패키지 (.xap)의 이름
- 어셈블리에 포함된 이름과 버전 메타데이터
- 이름과 버전 메타데이터는 AssemblyInfo.cs 또는 AssemblyInfo.vb에 저장됩니다.
- 응용 프로그램 패키지를 생성하는데 필요한 응용 프로그램 메니페스트 (수정 불가) 
사용자 삽입 이미지


어셈블리 참조 (Assembly References)
Silverlight 기반 응용 프로그램 프로젝트는 Silverlight 2와 관련된 필수적인 다음 어셈블리를 포함합니다.
- mscorlib.dll
- System.dll
- System.Windows.dll

또한 다음은 일반적 응용 프로그램 기능을 위해 포함된 어셈블리입니다.
-
System.Core.dll
- System.Net.dll
- System.Windows.Browser.dll
- System.Xml.dll

참조하는 어셈블리는 솔루션 탐색기에서 프로젝트 참조에서 확인하실 수 있습니다.
사용자 삽입 이미지


코드 파일
Silverlight 응용 프로그램 프로젝트에는 아래 클래스들을 빌드하는 코드 파일들이 있습니다.

- Page: Page 클래스는 User Interface (UI)를 만들기 위해 생성됩니다. Page 클래스는 UserControl로부터 파생되고 XAML 마크업 파일 (Page.xml)과 코드 비하인드 파일 (C# 사용할 경우 Page.xaml.cs 또는 Visual Basic 사용할 경우 Page.xaml.vb)로 구성되어집니다
사용자 삽입 이미지

마크업 파일과 코드 비하인드 파일을 사용한 클래스 구현에 관해 좀 더 많은 정보는 아래링크를 참고 하시기 바랍니다
.
코드 비하인드와 부분 클래스 (Silverlight 2)

- APP: 응용 프로그램 클래스로 생성된 App 클래스는 모든 Silverlight 기반 응용 프로그램에 메인 응용 프로그램 UI를 보여주기 위해 또한 응용 프로그램을 구동하기 위해 필요합니다. 다음으로 이 클래스는 응용 프로그램 패키지 (.xap)가 다운로드된 후에 즉시 Silverlight 플러그인에 의해 관리됩니다App 클래스는 시작 개체에서 응용 프로그램 구동을 핸들링합니다. 아래 프로젝트 - 속성 화면을 참고하시기 바랍니다.
사용자 삽입 이미지

App
클래스도 Page 클래스와 마찬가지로 XAML 마크업 파일 (App.xaml) 과 코드 비하인드 파일 (C# 사용할 경우 App.xaml.cs 또는 Visual Basic 사용할 경우 App.xaml.vb)로 구성됩니다.
사용자 삽입 이미지

응용 프로그램 클래스에 대해서 좀 더 자세한 정보는 Silverlight 응용 프로그램 어셈블리 개발을 참고하시기 바랍니다
..

테스트 페이지
여러분이 Silverlight 응용 프로그램 추가 대화 상자에서 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하셨다면 프로젝트에 HTML page (TestPage.html) 하나가 생성됩니다. 이 파일은 여러분의 Silverlight 기반 응용 프로그램에서 호스팅되고 <object> 태그를 사용하여 Silverlight 기반 응용 프로그램을 다운로드하고 실행하는 Silverlight 플러그인을 관리합니다. Visual Studio에서 여러분의 응용 프로그램을 실행할 때 웹 브라우저에서 실행됩니다.

Silverlight 기반 응용 프로그램 웹 사이트 항목

Silverlight 응용 프로그램 추가 대화 상자에서 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하셨다면 Silverlight 응용 프로그램 프로젝트 템플릿은 ASP.NET 기반 웹 사이트를 만들고 생성된 솔루션에 웹 사이트를 추가합니다. 웹 사이트에는 일반적 기본 ASP.NET 웹 응용 프로그램 프로젝트 파일들이 포함됩니다.
- 기본 웹 페이지인 마크업 페이지 (Default.aspx)와 코드 비하인드 (C#을 사용한다면 Default.aspx.cs 또는 Visual Basic을 사용한다면 Default.aspx.vb) 파일로 구성됩니다.
- 웹 사이트 설정 파일 (web.config)

ASP.NET 웹 응용 프로그램에 대해서 좀 더 자세한 정보는 ASP.NET 응용 프로그램을 참고하시기 바랍니다.
또한 Silverlight 기반 응용 프로그램 호스팅을 위해 특히 웹 사이트는 .aspx 파일과 .html 파일을 포함합니다. 두 파일의 이름은 Silverlight 기반 응용 프로그램 프로젝트의 이름과 "TestPage" 텍스트로 연결되어 만들어집니다. 예를 들어, Silverlight 기반 응용 프로그램의 이름이 "EloiSilverlightApp" 라면 다음과 같은 이름을 가진 파일들이 생성됩니다.

- EloiSilverlightAppTestPage.aspx
- EloiSilverlightAppTestPage.html

.html 파일은 <object> 태그를 사용하여 Silverlight 플러그인을 설정하고 여러분의 Silverlight 기반 응용 프로그램을 실행하고 다운로드하게 합니다. .aspx 파일은 Silverlight ASP.NET 서버 컨트롤을 사용하여 .html 파일과 유사한 HTML을 생성합니다.
Silverlight ASP.NET 서버 컨트롤에 대해서 좀 더 자세한 정보는 ASP.NET 페이지와 Silverlight 통합을 참고하세요.

기본적으로 .aspx 파일은 시작 페이지로 설정되어 있으며 Silverlight 기반 응용 프로그램 프로젝트가 빌드될 때 응용 프로그램 패키지 파일 (.xap)은 웹 사이트로 복사되고 .aspx 페이지를 통해 실행하고 다운로드할 수 있습니다.

사용자 삽입 이미지

상단 메뉴를 이용한 화면이고 솔루션 탐색기에서도 솔루션 이름에 마우스 우측 버튼 메뉴를 이용하여 빌드할 수 있습니다.
사용자 삽입 이미지사용자 삽입 이미지

사용자 컨트롤과 클래스 추가하기
사용자 컨트롤은 용어 그래도 사용자가 만드는 컨트롤입니다. 사용자 컨트롤을 만들면 .xaml 파일과 그 하위에 .cs 파일이 만들어지는데 .xaml 파일은 컨트롤 그 자체를 생성하는데 사용되고 .cs 파일은 .xaml 파일로 만들어진 컨트롤의 동적 액션을 주는데 사용됩니다.

또한 사용자 컨트롤은 하나의 dll로 만들어질 수도 있고, 독립 실행 컨트롤의 형태를 띄어야 하므로 .xaml 파일과 .cs 파일로 만들어집니다. .xaml 파일만으로는 컨트롤에 액션을 줄 수 없기 때문입니다.

기존 Silverlight 프로젝트에 사용자 컨트롤을 추가하기 위해 솔루션 탐색기프로젝트에서 마우스 우측 버튼 클릭하여 차례로 추가, 새 항목을 클릭하고 Silverlight 사용자 컨트롤을 선택합니다.
사용자 삽입 이미지

사용자 삽입 이미지
Silverlight 사용자 컨트롤 추가 그림

 생성된 사용자 컨트롤은 Page 클래스처럼 XAML 마크업 파일과 코드 비하인드 파일로 만들어집니다.

사용자 삽입 이미지

사용자 컨트롤 .xaml 파일과 .cs 파일을 사용하여 클래스를 구현하는 방법의 좀 더 자세한 정보는 코드 비하인드와 부분 클래스 (Silverlight 2)를 참고하시기 바랍니다. 일반적으로 메인 응용 프로그램 UI 구현을 위해 응용 프로그램에서는 메인 사용자 컨트롤인 Page를 사용합니다. Page 사용자 컨트롤은 추가적으로 사용자 컨트롤을 포함하여 여러 요소들로 구성되어집니다. 그리고 응용 프로그램 네비게이션 모델이 Page 사용자 컨트롤을 사용할 경우 자식 사용자 컨트롤의 메인 UI를 변경하여 페이지 이동을 할 수 있습니다.

기존의 Silverlight 프로젝트에 클래스를 추가하기 위해서는 솔루션 탐색기에서 차례로 추가, 새 항목, 클래스를 클릭합니다. 그러면 여러분의 프로젝트에 새로운 빈 클래스가 추가될 것입니다.

지금까지 Visual Studio를 사용하여 Silverlight 응용 프로그램 만들기에 대해서 알아보았습니다. 내용 중에 해당 사항의 좀 더 자세한 정보를 위한 링크는 필요하시다면 이 링크가 아니더라도 다른 책이나 인터넷 자료를 이용하셔서 공부하시기 바랍니다. 이는 여러분께 Silverlight 내용에 좀 더 많은, 확실한 지식을 주게 될 것입니다. ^^

다음 시간에는 Silverlight 클래스 라이브러리 만들기에 대해서 알아보겠습니다.

더운 여름 짜증내지 마시고 오히려 주위 분들께 활기찬 모습과 웃음을 먼저 표현해보세요. 그러면 여러분은 더욱 즐거운 하루를 보내시게 될 것입니다. 받는 기쁨보다 주는 기쁨이 더 크다는거 알고 계시죠? ^_______^*

 

참고 사이트
1. Silverlight 클래스 라이브러리 만들기

2. 응용 프로그램 개발 개요

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
원글출처:http://msdn.microsoft.com/en-us/library/bb404708(VS.95).aspx
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.


안녕하세요. 이제훈입니다.

모두들 멋진 닉네임 하나씩 가지고 계시지요?
제 이름도 기억해주시고 앞으로 닉네임으로도 불러 주십솨해서 소개(?)해드립니다. ^^
제 닉네임은 eloi라고 합니다. 방금 어떻게 읽으셨나요? 엘로이? 엘루아? 이 엘 오 아이?
어떻게 불러주셔도 크게 상관은 없지만 우리들은 영어에 익숙(?)한지라 보통 엘로이라고 읽으셨을 것 같습니다. 제 주위 분들도 편하게 부르실엘로이라고 보통 부르십니다.

그런데 eloi가 영어도 불어도 아닌지라엘리라고 읽습니다. 앞으로 제 본명이나 닉네임이나 편하게 불러주세요. 그리고 좀 더 관심을 품으시고 단어의 기원에 대해서 궁금하신 분은 메일 주시기 바랍니다. ^^

앞으로 Silverlight 2를 소개해나가기 전에 잠시 과거로 돌아가 보겠습니다.

3년 정도 한국마이크로소프트 웹 벤더 사에서 근무하면서 웹 사이트 개발 및 유지를 해왔습니다.
2006
년도 어느 날 d2:MIX Seoul 2006 – The Next Web Now 라는 행사가 열리게 되어 행사 페이지를 오픈 중이었죠. (언제 오픈한지 기억이 안나 검색해보았습니다. ^^)

사용자 삽입 이미지
처음엔 디자이너와, 개발자들 모두 모이는 행사라고 해서 조금은 의아해 했었습니다.
보통 MSDN, TechNet 관련해서 개발자, IT Pro, 학생 대상인 세미나가 많았던 이유 때문이었습니다. 또한 이 행사가 Expression 소프트웨어 출시 전 UX와 함께 소개되는 행사였습니다.

저는 사실 이 행사가 특이하게 홍대 클럽에서 열리고 해서 바쁜 와중에 한 번 가보고 싶은 마음이 있었는데 한 편으로는 단지 '마이크로소프트에서도 디자인 툴에 사업을 힘차게 해보려나 보다.' 라고만 생각하여 개발자인 저로서 조금은 관심이 없었던 행사이기도 하였습니다.

여러분들도 처음엔 저게 뭔가하는 생각이 드셨을 거라 생각이 듭니다.
(아닌 분들도 계시겠지요? ^^)

그리고 지난 달에 열린 Remix 08 (Beyond RIA) 행사가 있어 참여하게 되었는데, 지나가던 여성 분들께서 너무 개발자 중심 아닌가 싶어? 이해 되지 않는 부분이 많다. 구치?’ 하는 얘기를 듣게 되었습니다. 두 분 모두 디자이너이셨던 것 같습니다.
사용자 삽입 이미지
제 이야기와 두 디자이너 분의 이야기를 한 이유는 이렇습니다.

앞으로 Silverlight (+Expression Tool)는 개발자, 디자이너 모두 조금은, 경우에는 많이 본인 분야가 아니라고 하는 부분까지 신경을 쓰고 협업해야할 것입니다.
저도 처음엔 개발자로서 관심 밖이었고 도대체 저게 뭐하는거야라고 생각이 들었었는데 Silverlight 응용프로그램~ 가벼우면서도 멋진 것이더군요. ^^

많은 분 들이 관심을 가지시고 앞으로 세상에 함께 변화되어 가는 것이 아니라 변화에 대해 주체가 되었으면 하는 마음입니다. Silverlight가 앞으로 RIA의 중심이 될 동영상 프로그램, 동영상 서비스 어떤 것이든 큰 중심이 될 것입니다.

그럼 본격적으로 Silverlight 2에 대해서 소개를 하면서 제 글을 시작해 나가겠습니다.

 Silverlight 개요

Microsoft Silverlight는 앞으로 웹에서 경험하게 될 다양하고 화려한 미디어와 풍부한 대화식 응용 프로그램 (RIA)를 구축하고 제공하기 위한 .NET 프레임워크의 크로스 브라우저, 크로스 플랫폼의 구현입니다. 또한 Silverlight는 선언적, 전통적 프로그래밍의 관리되는 코드와 동적 언어로 서버의 성능과 웹, 데스크톱, Windows Presentation Foundation(WPF)를 통합합니다. 베타이긴 하지만 현재 최신 버전인 Silverlight 2 .NET 프레임워크 지원을 포함하여 1.0 보다 많은 기능이 추가되었습니다. 앞으로 두 버전 모두에 적용되는 기능을 설명할 것입니다.

조금은 개념적이라 이해하기 힘들 수 있으실 것 같습니다.
그럼 조금 더 자세히 알아보도록 하겠습니다. 

Silverlight는 무엇인가?
화려하고 예술적 응용 프로그램을 만들 수 있는 Silverlight는 아래와 같은 특징이 있습니다.

-
크로스 브라우저(cross-browser), 크로스 플랫폼(cross-platform)

많이들 사용하고 있는 Internet Explorer Firefox, Opera, Safari에서 모두 실행이 가능하고, Microsoft Windows Mac OS X에서도 실행 가능합니다.

- 어느 곳에서도 실행 가능한 일관된 경험, 결과
- 가벼운 설치 프로그램
- 비디오, 오디오 스트리밍(모바일 단말기에서 데스크톱 브라우저까지 720p HDTV 비디오 모드로 스케일합니다.)
- 전체 페이지를 새로고침 하지 않고 데이터를 읽고 화면을 업데이트 할 수 있습니다.
- 풍부한 그래픽과 사용자 상호 작용을 가진 Silverlight 기반 응용 프로그램

사용자 삽입 이미지

웹 개발자와 그래픽 디자이너는 다양한 방법으로 Silverlight 기반 응용 프로그램을 만들 수 있습니다. Silverlight 마크업으로 미디어와 그래픽을 만들 수 있고 이를 동적 언어 및 관리되는 코드로 변경, 조작할 수 있습니다.

Silverlight
기능은 어떤 것이 있는가?

Silverlight는 목적에 맞게 적당한 도구와 적당한 언어로 단일 개발 플랫폼에서 여러 기술을 포함시킵니다.  Silverlight는 다음과 같은 기능을 제공합니다.

- WPF XAML. Silverlight Windows Presentation Foundation (WPF) 기술을 포함하고 이는 UI 개발에서 브라우저 안의 요소들을 크게 확장 가능하게 합니다. WPF로 멋진 그래픽과 애니메이션, 미디어, 등 강력한 클라이언트 기능을 만들 수 있고 HTML로만 가능했던 것을 넘어 브라우저 기반 UI를 좀 더 멋지게 만들 수 있습니다. Extensible Application Markup Language (XAML)로는 선언적 마크업 구문을 통해 WPF 요소를 만들 수 있습니다.

- JavaScript 확장. Silverlight는 보편적인 브라우저 스크립트 언어로 확장성을 제공하고 WPF 요소로 할 수 있는 작업들을 포함하여 브라우저 UI를 강력하게 제어할 수 있습니다.

-
크로스 브라우저, 크로스 플랫폼 지원. Silverlight는 어느 플랫폼이든, 어떤 브라우저든 같은 결과를 나타냅니다. 이는 사용자가 사용하는 브라우저와 플랫폼을 고려하지 않고 개발 및 디자인을 할 수 있다는 의미입니다.

-
기존 응용 프로그램 통합. Silverlight는 여러분의 기존 JavaScript와 이미 개발해둔 기존의 기능을 보완해줄 ASP.NET AJAX 코드를 원활하게 통합할 수 있습니다.

- .NET
프레임워크 프로그래밍 모델과 관련 도구 액세스. JScript IronPython 같은 동적 언어와 C# Visual Basic 같은 언어를 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있습니다. 그리고 Visual Studio 같은 개발 도구를 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있습니다.

- LINQ. Silverlight
는 통합 질의 언어 (LINQ)를 포함하고 있습니다. LINQ는 직관력 있는 기본 문법과 .NET 프레임워크 지원 언어 내의 강력한 정형화된 객체를 사용하여 데이터 액세스 프로그램을 만들 수 있습니다.

- ASP.NET
AJAX. ASP.NET을 경험해보셨다면, ASP.NET의 서버와 클라이언트 기능과 Silverlight를 조금 더 쉽게 통합할 수 있습니다. 또한 ASP.NET 내 서버 기반 리소스를 만들 수 있고 사용자 트랜잭션이 없이 서버 기반 리소스를 통신하는 비동기적 ASP.NET AJAX 기능을 사용할 수 있습니다.

- Silverlight Architecture.
좀 더 자세한 내용은 Silverlight Architecture를 공부하시면 됩니다. 여기서는 간단히 Silverlight Architecture만 보겠습니다.

사용자 삽입 이미지

Silverlight
기반 응용 프로그램 실행

Silverlight 기반 응용 프로그램은 브라우저 내에서 실행됩니다. 현재 모든 브라우저에서 특정 코드를 만들지 않고도 Silverlight 응용 프로그램을 실행할 수 있습니다. Silverlight 기반 응용 프로그램을 실행하기 위해서 사용자는 브라우저 내에 단지 가벼운 플러그인만 필요로합니다. 플러그인은 무료입니다. ^.^ 사용자 브라우저에 플러그인이 설치되어 있지 않다면 자동으로 플러그인 설치 알림을 받습니다. 다운로드와 설치는 수 초가 걸리고 설치 권한이 없는 사용자에게는 제한이 됩니다. 

Silverlight 기반 응용 프로그램 개발

이미 여러분들이 알고 있는 기술과 도구로 Silverlight 기반 응용 프로그램을 개발할 수 있습니다. 여러분은 HTML WPF 요소들을 사용하여 웹 페이지를 만들고 HTML, XAML 같은 선언적 마크업 언어로 웹 기반 응용 프로그램을 위한 UI를 만들 수 있습니다. XAML은 좀 더 두드러지게 강력한 요소들을 제공합니다.

Visual Studio 사용

Visual Studio 2008을 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있는데, Visual Studio Silverlight를 위해 강력한 에디터, 프로젝트 관리, 디버깅, 등과 같은 동일한 도구를 제공합니다. 이미 이 것들은 .NET 프레임워크와 함께 응용 프로그램을 위해 제공하고 있습니다. 

사용자 삽입 이미지

Expression Blend
사용

Microsoft Expression Blend Silverlight 기반 응용 프로그램 디자인과 빌드, 제공까지 할 수 있습니다. 또한 그래픽과 미디어 자료, 상호 작용 가능한 디자인 생성에 필요로 되는 모든 기능을 가지고 있습니다. Expression Blend XAML 파일을 생성할 수 있는데 이는 Visual Studio를 사용하는 프로그래머와 Expression Blend를 사용하는 디자이너가 같은 파일을 공유할 수 있다는 의미입니다.

사용자 삽입 이미지

이번 시간은 여기서 마치도록 하겠습니다. 오늘 다루었던 주제는 조금 개념적이지만 기본적으로 꼭 알고 넘어가셔야 합니다. 이해가 쉽게 되지 않는 부분은 앞으로 실제 예제를 다루면서 풀어나가도록 하지요. ^.^
서울도 드디어 30도가 넘었습니다. 작년부터 여름이 너무 습하네요. 모두들 건강하시길 바라고, 활기차고 즐겁게 여름 보내시기 바랍니다. ^.^

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
원글출처:http://www.microsoft.com/expression/products/Overview.aspx?key=studio
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.


실버라이트 개발을 위해 필요한 툴이 많이 오픈 되어 있습니다.
하지만 매우 혼란스럽고, 또 언제 어떤 상황에서 내가 원하는 툴을 사용해야 하는지 좀 모호하기도 합니다.
그래서 관련 툴에 대한 설명을 간단하게 정리해 보았습니다.


Microsoft Expression Studio 2 특징


윈도우즈와 웹을 위한 디자인
- 닷넷 프레임워크와 실버라이트를 이용하여 디자인을 하기 위한 툴

개발자 워크플로우 디자이너
- 디자인과 혁신적 애플리케이션을 위한 강력하고 통합된 솔루션 제작을 위한 Visual Studio와 디자이너를 위한 Expression Studio가 결합되어 있다.

실버라이트 1.0을 위한 디자인
- Expression Studio 2는  마이크로소프트의 새로운 웹 기술 실버라이트 1.0을 위한 필수적인 디자인 리소스 입니다.

Expression Web2로 표준에 기반한 디자인
- 오늘 날의 웹 표준 디자인을 할 수 있는 Expression Web2는 XHTML, CSS, XML 그리고 XSLT와 같은 버전을 선택할 수 있고, 컴파일을 통해 시각적 레이아웃을 만들 수 있습니다.

Expression Web2로 ASP.NET과 PHP 지원
- Expression Web2는 ASP.NET 3.5와 PHP 양쪽을 깊이있게 지원하는 디자인 툴 입니다.

Expression Blend 2로 디자인 경험
- 코드라인을 타이핑할 필요없이 디자인 애플리케이션 스킨과 상호작용할 수 있고, 애니메이션을 만들 수 있다.

XAML을 위한 디자인
- XAML 포맷에서 Blend 와 실버라이트를 위한 디자인 그래픽 엘리먼트를 공유할 수 있다.

Expression Design2로 Artwork 생성하기
- 웹을 위한 이미지를 XAML을 이용해서 데스크탑이나 웹 애플리케이션에 필요한 이미지를 생성할 수 있다.

Expression Media2로 디자인 관리하기
- Expression Media를 이용하여 그래픽과 비디오 파일들을 보관할 수 있다.

Expression Encoder2
- 비디오 콘텐트와 웹 사이트가 상호작용하는데 필요한 툴 입니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-
원글출처:http://silverlight.net/
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.


실버라이트 1.0 릴리즈를 실행하기 위해 추천되는 시스템
  • 윈도우즈 XP, 윈도우즈 서버 2003, 윈도우즈 비스타: 128MB RAM, 인텔 펜티엄 2 450MHz 나 더 빠른 프로세서
  • 매킨토시 OS 10.4.8 이나 상위버전 : !GB 메모리, Power PC G3 500MHz 나 더 빠른 프로세서 또는 인텔 코어 듀오 1.83GHz나 더 빠른 프로세서

실버라이트 1.1 알파
  • 윈도우즈 XP, 윈도우즈 서버 2003, 윈도우즈 비스타: 128MB RAM, 인텔 펜티엄 2 450MHz 나 더 빠른 프로세서
  • 매킨토시 OS 10.4.8 이나 상위버전 : !GB 메모리, 인텔 코어 듀오 1.83GHz나 더 빠른 프로세서

실버라이트의 브라우저와 OS 지원여부
실버라이트는 크로스-브라우저 플러그인이며, 작은 사이즈로 디자인 되어져 있다.
실버라이트는 아래의 것들과 호환된다.

  • IE6.0, IE7.0 그리고 파이어폭스 1.5와 2.0 브라우저를 사용하는 윈도우즈 XP SP2, 윈도우즈 비스타 및 윈도우즈 서버 2003
  • 사파리 파이어폭스 1.5와 2.0을 사용하는 Mac OS 10.4.8

실버라이트 1.1 알파는 다음의 것들과 호환된다.

  • IE6.0, IE7.0 그리고 파이어폭스 1.5와 2.0 브라우저를 사용하는 윈도우즈 XP SP2, 윈도우즈 비스타 및 윈도우즈 서버 2003
  • 사파리 파이어폭스 1.5와 2.0을 사용하는 Mac OS 10.4.8
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by -세티-