달력

02

« 2012/02 »

  •  
  •  
  •  
  • 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
  •  
  •  
  •  

'Silverlight'에 해당되는 글 48

  1. 2009/07/27 Expression Blend 3를 만나는 곳
  2. 2009/07/20 [Expression Media] 5. Expression Media로 미디어 파일 버전관리 (2)
  3. 2009/07/17 [Expression Media] 4. Expression Media로 슬라이드 쇼 만들기
  4. 2009/07/06 [Expression Media] 3. 카탈로그 다루기.
  5. 2009/07/05 [Expression Media] 2. EM을 이용한 HTML 갤러리 생성
  6. 2009/07/04 [Expression Media] 1. Expression Media란?
  7. 2008/10/21 [엘리의 실버라이트 2.0] Silverlight 시계 만들기 (1) (2)
  8. 2008/10/02 [엘리의 실버라이트 2.0] Silverlight 시작 (6)
  9. 2008/09/21 [엘리의 실버라이트 2.0] 관리되는 코드에서 HTML DOM에 액세스 (3)
  10. 2008/09/11 [엘리의 실버라이트 2.0] Syndication Feeds 액세스
  11. 2008/09/06 [엘리의 실버라이트 2.0] Plain XML 보내기 • 받기
  12. 2008/08/25 [엘리의 실버라이트 2.0] 스플래시 스크린 만들기
  13. 2008/08/19 [엘리의 실버라이트 2.0] Silverlight 입력 이벤트 핸들러 작성 (2)
  14. 2008/08/12 [엘리의 실버라이트 2.0] Silverlight 입력 이벤트 핸들러 작성 (1) (2)
  15. 2008/08/11 [세티의 실버라이트] 15. 미디어
  16. 2008/08/06 [엘리의 실버라이트 2.0] Visual Studio의 개체 브라우저에 대해 알아보자.
  17. 2008/07/30 [엘리의 실버라이트 2.0] Silverlight 디자이너 미리보기
  18. 2008/07/29 [세티의 실버라이트] 14. 전문 컨트롤 만들기
  19. 2008/07/23 [엘리의 실버라이트 2.0] Silverlight 클래스 라이브러리 만들기
  20. 2008/07/21 [세티의 실버라이트] 13. 애니메이션 (2)
  21. 2008/07/18 [엘리의 실버라이트 2.0] Silverlight 응용 프로그램 만들기
  22. 2008/07/16 [세티의 실버라이트] 12. 마우스 이벤트와 프로시저 코드 (4)
  23. 2008/07/11 [엘리의 실버라이트 2.0] 첫 인사
  24. 2008/07/11 [세티의 실버라이트] 11. Expression Blend 2.5를 이용한 그리기(2)
  25. 2008/06/29 [세티의 실버라이트] 11. Expression Blend 2.5를 이용한 그리기(1)
  26. 2008/06/25 [세티의 실버라이트] 10. Expression Blend 2.5 설치하기.
  27. 2008/06/11 [세티의 실버라이트] 9. 애니메이션(animations)
  28. 2008/06/09 [세티의 실버라이트] 8. 미디어 (2)
  29. 2008/06/04 [세티의 실버라이트] 7. 텍스트
  30. 2008/06/01 [세티의 실버라이트] 6. Images (2)
2009/07/27 15:08

Expression Blend 3를 만나는 곳 Silverlight2009/07/27 15:08

몇 일전에 익스프레션 블렌드 3와 실버라이트 3.0이 발표 되었습니다.
좀 늦은 포스팅 이긴 하지만 관련 자료를 열람할 수 있는 주소를 정리해 보았습니다.

관심 있는 분들은 천천히 읽어보셔도 좋을 듯 합니다.
특히 Visual Kitchen은 한 시간 짜리 동영상 이긴 하지만 말은 잘 못알아들어도 봐두시면 익스프레션 블렌드 3.0의 특징에 대해 잘 아실 수 있게 됩니다. 꼭 보시면 도움이 될 겁니다. 한 시간만 투자하세요.^^

실버라이트 3.0 퀵 스타트 : http://silverlight.net/quickstarts/
실버라이트 3.0 개발툴 관련 사이트 : http://silverlight.net/GetStarted/
실버라이트 3.0 특징 : http://silverlight.net/learn/videocat.aspx?cat=12
실버라이트 3.0 도입 사례 : http://www.microsoft.com/silverlight/
실버라이트 3.0에서 새로워진 부분 : http://silverlight.net/getstarted/silverlight3/default.aspx
익스프레션 블렌드 3에 대한 소개 : http://expression.microsoft.com/ko-kr/dd565875(en-us).aspx
익스프레션 블렌드 3(스케치 플로우)에 대한 소개 : http://expression.microsoft.com/en-us/ee215229.aspx
딥줌 composer 다운로드 : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457b17b7-52bf-4bda-87a3-fa8a4673f8bf
익스프레션 블렌드에 대한 새로운 특징과 기능을 상세하게 감상할 수 있는 Visual Kitchen : http://www.microsoft.com/silverlight/seethelight/

저작자 표시 비영리 변경 금지
Posted by -세티-
Expression Media는 미디어 파일 변경에 대한 버전관리 기능을 제공합니다.
버전관리 기능을 통해 변경된 이미지와 원본 이미지를 선택해서 사용할 수 있습니다.
원본 이미지를 실수로 변경해서 원본 손실에 대한 후회를 조금은 덜 수 있게 되었습니다.

먼저 Expression Media를 실행합니다.
[파일] 에서 [항목 가져오기]로 이동하고 [파일/폴더에서(F)]를 클릭합니다.

사용할 미디어 파일을 선택합니다.

아래 이미지에서 빨간 네모 아이콘은 [라이트 테이블] 이라고 하는 기능입니다.

라이트 테이블선택한 이미지를 보거나 비교할 때 매우 유용합니다.
이것을 통해 간단하게 이미지를 변경하거나 회전을 시킬 수 있고, 또한 이미지의 색 레이블이나, 파일 이름, 크기, 크기 조정 백분율 등이 표시 됩니다.

아래의 이미지 처럼 [이미지 편집기]를 클릭합니다.
이미지 편집기이미지의 색이나 밝기, 선명도, 이미지 보정등에 사용되는 도구 입니다.
이미지 편집기에서 지원되는 다양한 기능을 적용해 보세요.

아래는 이미지 편집기로 변경한 이미지 입니다.

이렇게 변경된 이미지는 버전관리를 해줌으로써 여러가지 미디어 버전을 확보할 수 있습니다.
변경한 이미지가 마음에 들지 않을 경우 버전 폴더에서 이전 이미지를 가져오기만 하면 됩니다.
그러기 위해선 먼저 버전 폴더를 생성해야 합니다.
버전 폴더는 [이미지 편집기]에서 [설정]을 클릭함으로써 생성합니다.

버전 폴더를 생성한 후 이미지를 변경해 보세요.
그러면 아래 그림 처럼 미디어 버전이 만들어 지게 됩니다.

변경한 이미지를 다시 변경하게 되면 이미지 버전이 새롭게 추가 됩니다.

이렇게 생성된 이미지는 버전 폴더에 차곡차곡 쌓이게 됩니다.

이미지를 다시 돌리는 방법은 생성된 미디어 버전을 선택함으로써 편리하게 변경할 수 있습니다.

[참고]
1. OMSS, http://silverlight.net/Learn/videocat.aspx?cat=6
2. Expression Media Help Guide
저작자 표시 비영리 변경 금지
Posted by -세티-
오늘 정리한 내용은 Expression 미디어로 슬라이드 쇼 만들기 입니다.
정리해논 자료가 좀 되는데 시간이 부족해서 올리질 못하네요.^^:

슬라이드 쇼를 만들기 위해 필요한 이미지를 몇 장 선택하고 EM에 추가합니다.

다음엔 메뉴바에서 [만들기]를 클릭합니다.

[슬라이드 쇼 옵션]에는 다양한 슬라이드 속성을 설정할 수 있도록 되어 있습니다.
지속시간슬라이드 전환 시간이고, 배경색이며, 전환은 전환되면서 슬라이드가 표현하는 양식 입니다. 미디어 크기 조정은 슬라이드 쇼 완성 후 보여지는 이미지의 크기 이며, 스테이지 모눈은 전체화면에서 이미지를 몇개로 보여줄 것인가 하는 부분입니다.

취향대로 속성을 설정하고, 마지막으로 재생옵션과 일반옵션을 선택하는데 음성 주석 재생은 체크를 하지 않습니다. 마지막으로 슬라이드 쇼 [실행]을 클릭합니다.

전 전환시 아무 효과가 없도록 했습니다.

메뉴바에도 [Run] 버튼이 있습니다.

아래의 그림처럼 슬라이드 쇼가 진행되면서 현재 보여지고 있는 이미지를 빨간 글씨로 표시해 줍니다.

또한 [텍스트]에서 미디어 파일의 정보를 체크를 통해 볼 수 있습니다.

[정보] 에서는 미디어 파일의 디테일한 메타정보를 확인할 수 있습니다.

이제 슬라이드 쇼를 저장합니다.
굳이 설명하지 않아도 다 아실겁니다. 굉장히 옵션 자체가 굉장히 직관적 입니다.
적절하게 선택하고, [만들기]를 클릭하면 하나의 MOV 파일이 생성됩니다.


생성된 MOV 파일을 클릭하면 아래의 그림처럼 슬라이드 쇼가 완성됩니다.
이미지 뿐만이 아니라 동영상도 이와 같은 방법으로 슬라이드 쇼처럼 만들수 있습니다. 


[참고]
1. OMSS, http://silverlight.net/Learn/videocat.aspx?cat=6
2. Expression Media Help Guide
저작자 표시 비영리 변경 금지
Posted by -세티-

이번엔 Expression Media을 실행했을 때 오른쪽에 보이는 카탈로그 폴더라는 것을 살펴보겠습니다.
먼저 설치한 Expression Media을 가볍게 실행해 줍니다.
그리고 아래의 그림처럼 메뉴 > 항목 가져오기 > 파일/폴더에서... 를 선택합니다.


미디어 파일 또는 폴더 선택 팝업이 활성화되면 원하는 이미지를 선택하고 가져오기를 클릭합니다.
저는 4장의 이미지를 선택했고, 작업영역에 선택한 4장의 이미지가 들어와 있는 것을 확인할 수 있습니다.
그리고 왼쪽 카탈로그 폴더가 하나 생성되어 있는 것을 볼 수 있습니다.


이 카탈로그가 어떤 것인지 간단하게 설명하겠습니다.
카탈로그에는 내가 선택한 파일에 대한 메타정보가 들어옵니다. 파일의 메타정보라 함은 가져온 파일의 하드디스크 위치나 이동식 저장장치에서의 파일 위치등이 될 수 있고, 또한 축소판에 나타난 그림의 버전 정보가 될 수 있습니다. 따라서 카탈로그가 가지는 미디어 파일의 정보를 이용해서 원본 없이 카탈로그를 검색할 수 있습니다.
이 카탈로그는 원본에 대한 축소이미지와 파일 정보만 가지기 때문에 원본이 삭제되었을 경우 카탈로그로 복구할 수 없다는 점을 알아주셨으면 합니다.


위의 사실을 아주 간단한 작업을 통해 증명해 보겠습니다.
생성된 카탈로그에 마우스로 선택하고 우클릭을 하고 지금폴더 업데이트를 선택합니다.


그러면 이미지를 선택한 폴더에 있는 나머지 사진 데이터들이 모두 카탈로그에 추가됩니다.
(카탈로그는 이미지에 대한 드라이브 정보를 가지고 있다는 것이 증명됩니다.)
아래의 그림 처럼 말입니다.



위의 이미지를 보면 빨간 네모상자 안에 있는 카탈로그의 오른쪽 숫자가 4에서 33으로 변경되어 있는 것을 확인할 수  있습니다.
이제 다시 축소판 그림에서 선택한 이미지들을 삭제해 보겠습니다.
몇 가지를 선택해서 삭제하면 카탈로그에서 제거 라는 버튼이 보입니다. 그것을 클릭해서 삭제하면 카탈로그에서 이미지가 사라진 것을 확인할 수 있습니다.


해당 이미지가 존재하는 폴더 위치로 가서 이미지를 확인해 보면 원본 이미지는 그대로 있는 것을 확인할 수 있습니다.

그 다음에 카탈로그의 드라이브 위치를 변경해 보겠습니다.
역시 마찬가지로 카탈로그 목록에서 마우스 우클릭하고 이번엔 폴더 경로 다시 설정을 클릭합니다.


저는 글쓰는데 사용되었던 이미지를 모아놓은 폴더를 선택했습니다.


폴더를 선택하면 아래의 이미지 처럼 카탈로그가 새롭게 생성됩니다.
카탈로그 목록에 표시되는 public의 위치는 공용 사진 폴더가 되고, 그 바로 아래에 있는 Images 카탈로그는 위에서 선택했던 폴더의 위치가 됩니다.
그것을 확인하기 위해 아래 그림처럼 마우스 우클릭하고 탐색기에서 폴더 열기를 선택하면 탐색기가 활성화 되면서 해당 폴더를 보여줍니다.


이제 선택한 폴더에 있는 이미지를 모두 가져와야 겠죠. 그러기 위해 위에서 해봤던 지금 폴더 업데이트를 선택합니다. 그러면 폴더에 있는 이미지들이 모두 자동으로 가져오게 되는 것을 확인할 수 있습니다.

참고로 이 카탈로그의 최대 용량은 1.8GB이고요, 최대 128,000개의 파일 까지 저장할 수 있습니다.
또한 참고로 축소판 이미지에 대한 옵션은 Expression Media의 메뉴바에서 편집 > 축소판 그림 및 미리보기 부분에서 옵션 설정으로 최적화 할 수 있습니다.

[참고]
1. OMSS, http://silverlight.net/Learn/videocat.aspx?cat=6
2. Expression Media Help Guide
저작자 표시 비영리 변경 금지
Posted by -세티-
앞에서 언급했듯이 Expression Media를 이용하면 전문가가 아니어도 매우 간단한 작업만으로 원하는 형태의 문서를 만들어 낼 수 있습니다.

본 실습을 위해 먼저 Expression Media를 설치해야 합니다. Try 버전은 다음의 주소에서 다운로드 받을 수 있습니다. (EM 다운로드 받기 : http://www.microsoft.com/downloads/details.aspx?FamilyId=CD359E7D-FD27-4901-BAFF-6D564CFBD700&displaylang=en )

다운로드가 완료되면 설치 후 EM을 실행합니다.
평가판 이기에 계속 버튼을 클릭하고 진행합니다.

이제 몇 가지 이미지를 추가해서 웹 문서 형태의 포토 갤러리를 생성해 보겠습니다.
로컬 컴퓨터에 있는 이미지 몇 장을 선택합니다.

선택한 이미지를 Expression Media에 끌어다 놓습니다.
아래의 이미지 처럼 작업 영역에 사용할 미디어 파일이 추가되어 있는 것을 확인할 수 있습니다.

Expression Media 상단 메뉴에서 "만들기"를 선택하고 HTML 갤러리를 선택합니다.

그러면 HTML 옵션창이 활성화 됩니다.
테마탭의 사이트 제목란에 적당한 이름을 적어 줍니다.
그리고 바로 아래에 있는 테마 선택상자에서 원하는 테마를 선택합니다. 저는 '깔끔'을 선택 했습니다.
다음으로 인덱스 테이블이나 축소판 그림 그리고 미디어를 원하는대로 선택합니다.


설정 탭에서는 출력되는 문서 속성을 설정합니다.
문서의 확장명을 무엇으로 할 것인지 동영상이 포함되어 있는지 등을 선택합니다.
그 다음 왼쪽 하단에 있는 옵션 버튼을 클릭하여 저장할 이름을 결정합니다.

서버 탭에서는 FTP 설정을 통해 원격 저장을 가능하게 해줍니다.
설정이 모두 끝났으면 만들기 버튼을 선택합니다.

문서가 생성될 적절한 폴더를 선택하고 확인 버튼을 클릭합니다.

아래의 그림과 같은 웹 사이트가 생성되었습니다.

화면의 쎔네일 이미지를 클릭해 봅니다.
그러면 큰 이미지를 가지고 있는 페이지로 전환되고, 큰 이미지를 보여주는 화면에서 다른 화면으로의 이동이 쉽도록 상단에 네비게이션이 제공되는 것을 확인할 수 잇습니다.

전에 이런 간단한 형태의 문서를 만들 때는 웹 문서를 만드는데 필요한 기술을 알아야지만 원하는 결과물을 만들어 낼수 있었습니다. 그러나 Expression Media는 Rich한 웹 문서를 전문적인 기술이 없어도 너무나 쉽게 만들어 줍니다.

문서가 생성된 디렉토리를 보면1개의 HTML 파일과 3개의 폴더를 확인할 수 있습니다.
index.htm은 생성된 문서이고, assets 폴더에는 자바스크립트 파일과 네비게이션에 필요한 이미지 아이콘들이 포함되어 있습니다. preview 폴더에는 웹 갤러리가 생성될 때 메인 페이지에 노출될 썸네일 이미지가 생성되어 있습니다. Source 폴더에는 큰 이미지를 보여주는 웹 문서와 원본 이미지가 포함되어 있습니다.


사용자 입맛에 맞게 꾸밀려면 약간의 작업이 필요하겠지만 그럴 필요없이 테마만으로 충분하다면 단지 사진 몇장 드래그와 버튼 몇개 클릭만으로 웹 갤러리를 만드는 Expression Media의 기능이 매우 만족스럽습니다.

[참고]
1. OMSS, http://silverlight.net/Learn/videocat.aspx?cat=6
2. Expression Media Help Guide
저작자 표시 비영리 변경 금지
Posted by -세티-
2009/07/04 23:28

[Expression Media] 1. Expression Media란? Silverlight2009/07/04 23:28

회사일도 바쁘고 C#과 실버라이트를 잠시 뒤로 미뤄두고 본의 아니게 현재 속한 곳에서 DBA 비슷하게 살고 있는 세티 입니다. (영원히 할 건 아니고 잠시....^^;;)

지금 몸 담고 있는 곳이 사교육 시장이어서 리치한 애플리케이션들을 참으로 많이 만들어 냅니다.(물론 제가 만든 건 아직 없고요...ㅎㅎ) 근데 이 곳에서도 실버라이트에 대한 관심은 아주 높더군요.
그래서 바쁜 시간 쪼개어 잠시 미뤄뒀던 이쪽(?)학습을 다시 시작했습니다.
뭔가를 만들려면 도구의 한계를 명확히 알아야 제가 표현하고 싶은 것들도 표현할 수 있을 테니깐요.
사실 실버라이트에 대해 깊이 있게 알지 못합니다. 프로젝트도 안해봤구요.^^
관련 도구의 성격도 아직은 잘 모르겠고요. 하지만 이렇게 정리해 가면서 들여다보게 되면 금방 제것이 될 거라는 생각이 듭니다. 단지 도구잖아요. ^^*

과거에 너무 어렵게 공부한 기억이 있어서 관련 내용에 대한 정리는 되도록이면 아주아주 쉽게쉽게 정리해 보겠습니다. 몇 가지 따라해보니깐 실제로 쉽긴 쉽더라구요. ㅡㅡ;;;
아무튼 강좌라기 보단 학습 정리에 대한 것으로 이해해 주시고, 필요한 분들은 저와 함께 포스트를 통해 공부해 보는 것도 좋을 것 같습니다.



Expression Media이미지나 동영상 그리고 사운드와 글꼴 등과 같은 미디어 파일 리소스를 이용해서 멀티미지어나 HTML 페이지등과 형태로 매우 빠르고 쉽게 구성할 수 있습니다. 많은 좋은 도구들이 현재도 없는 것은 아니지만 Expression Media는 직관적이고 쉬운 인터페이스 제공을 통해 전문가가 아닌 일반인들도 쉽게 원하는 결과물을 만들어 낼 수 있습니다.

이런 도구를 사용할려면 도구가 가지는 기능이나 성격을 필수적으로 알아야 하는 것은 아니지만 알아두면 원하는 작업을 보다 능률적으로 할 수 있을 것입니다.



Expression Media가 가지는 기능
  • MS Office 2007/2008의 파일 형식과 Expression Media에 필요한 여러가지 파일 형식을 지원합니다.
    • DOCX, DOTX, PPTX, POTX, XLSX, XLT(MS Office)
    • XAML, Design XEJ, CSS, JS, VBS
  • 네트워크 작업의 효율성
    • 한 사용자가 카탈로그를 열어 편집하는 동안 다른 사용자가 공유되는 위치에서 편집중인 카탈로그에 접근해서 내용을 볼 수 있도록 해주는 카탈로그 잠금 기능의 제공
  • 키워드 교집합 또는 합집합을 통해 이미지를 정렬할 수 있음.
  • 미디어 파일에 대한 계층 구조 키워드 생성이 가능(사진 파일의 모든 레이어에 설명 추가 가능)
  • 작업을 위해 필요한 미디어 파일을 쉽게 가져올 수 있고, 카탈로그, 축소판 그림 만들기 등을 더욱 빠르게 할 수 있고, 가져오는 중에 손상된 파일을 알려주는 기능이 있음.
  • 다중 모니터를 사용하는 작업 환경에서 라이트 테이블과 카탈로그, 도구를 분리해서 위치시켜 놓고 작업을 할 수 있어 작업 생산성이 향상됨.
  • 템플릿이 포함되어 있어서 플랫폼 독립적인 웹 갤러리 구성이 가능
  • Quick Time이 필요한 부분에는 "QT"라는 로고를 보여줌.
  • Quick Time이 없으면 WIC(Windows Imaging Component)를 사용하여 이미지 인코딩, 디코딩 변환을 수행해 줌.
  • 이동식 저장장치(USB, Memory Card) 등의 자료를 즉시 가져올 수 있음.

Expression Media는 Quick Time을 자동으로 설치해 주지 않습니다. 슬라이드 쇼의 실행, 동영상 파일의 변환이나 음성 파일의 변환과 같은 작업은 Quick Time이 있어야 작동시킬 수 있으므로 미리 설치해두면 좋을 것 같습니다.

Apple의 Quick Time : http://www.apple.com/quicktime/

[참고]
1. OMSS, http://silverlight.net/Learn/videocat.aspx?cat=6
2. Expression Media Help Guide

저작자 표시 비영리 변경 금지
Posted by -세티-

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

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을 사용하여 이번 시간에 만든 시계를 실제로 작동해보도록 하겠습니다. 비가 오니 이제 정말 시원해질 것 같습니다. 환절기 감기 조심하세요. ^.^
저작자 표시 비영리 변경 금지
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 아키텍쳐

저작자 표시 비영리 변경 금지
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에 액세스하는 것에 대해서 알아보았습니다.
행복한 하루 보내세요
~^.^


저작자 표시 비영리 변경 금지
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 리스트를 확인하시기 바랍니다.

 

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

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에 액세스하는 것에 대해서 함께 알아보겠습니다. 추석이 다가오네요. 풍성한 추석 보내시고 건강하세요~^^

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 데이터 컬렉션에 대해서 알아보도록 하겠습니다.

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

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 응용 프로그램을 다운로드 받을 때 로딩되는 진행 상황 등을 알려주는 임시 (준비) 페이지 만들기에 대해서 알아보겠습니다.

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 입력 핸들러 작성에 대해서 알아보도록 하겠습니다.
Posted by -세티-
2008/08/11 00:21

[세티의 실버라이트] 15. 미디어 Silverlight2008/08/11 00:21

원글출처 : 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를 이용한 실버라이트 애플리케이션 개발에 대해 간략하게 알아보았습니다.
좋은 하루 되십시오.^^
Posted by -세티-

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


지난 토요일 (도대체 언제 토요일을 말하는 걸까? ^^;) 저녁에 갑자기 목을 움직일 수 없을 정도로 뒷 목이 아파서 고생을 했습니다. 잠을 잘 못 잔 것도 아닌데그래서 자고 일어나면 괜찮아지겠지 했는데 아침에 침대에서 일어나려고 하니 목에 힘을 주면 너무 아파서 침대에서 일어나지 못할 정도였습니다. 이 때야 알았습니다. ‘침대에서 일어날 때도 목에 힘이 들어가고 있었구나…’ ㅋㅋ

어쨌든 도저히 안될 것 같아서 응급실에 가서 근육 이완제, 진통제 맞고 입원까지 할 것 같아 읽을 책이나 필요한거 간단히 챙겨 갔었는데 다행히 약만 지어주고 집에 가라고 하더군요.
일주일 정도 지났는데도 목이 좀 불편하긴 하네요. .

 

목이 아프기 전에도 조금씩 하고는 있었던 몸살림 운동이라고 있습니다.

간단히 본인의 좋지 않은 부위를 위한 운동들을 할 수 있는데, 어렵지도 않고 꾸준히 오래만 한다면 좋다고 하는데 여러분들도 댁에서 해보시기 바랍니다. (http://www.momsalim.or.kr)

좋은 정보 되셨으면 하는 마음에 소개해드립니다. ^^ (잡담이 점점 늘어나네요. --)

 

그럼 본론으로 들어가서, 개체 브라우저에 대해서 알아보겠습니다.

 

Visual Studio 개체 브라우저 Silverlight 어셈블리 탐색

 

Silverlight 프로젝트는 Visual Studio와 함께 설치된 어셈블리 대신 Silverlight와 함께 설치된 .NET 프레임워크 어셈블리를 참조합니다. Visual Studio 개체 브라우저는 Silverlight 어셈블리를 검색할 수 있고 여러 기준 별로 보기 상태를 설정할 수 있습니다. 또한 솔루션 탐색기에서 선택한 프로젝트에 참조를 추가할 수도 있습니다.

 

개체 브라우저에서는 네임스페이스와 클래스, 형식, 어셈블리 멤버들을 확인할 수 있습니다. 문서를 참조하는 것보다 개체 브라우저로 이용 가능한 프로그래밍 요소들을 좀 더 나은 방법으로 검색할 수 있습니다. 개체 브라우저는 문서를 제공하고 있진 않지만 프로그래밍 시 어셈블리를 참고할 때에 여러분들에게 많은 도움을 줄 수 있을 것입니다. Silverlight 형식과 멤버 관련 모든 문서는 MSDN 라이브러리의 Silverlight 참조를 참고하시기 바랍니다.

 

사전 준비 도구

- Silverlight 2 베타 2

- Visual Studio 2008 (90일 평가판)

- Visual Studio 2008 Silverlight Tools 베타 2

 

그럼 개체 브라우저 특징과 기능들에 대해서 좀 더 자세히 알아보도록 하겠습니다.

 

먼저 개체 브라우저를 메뉴에서 보기 개체 브라우저를 선택하여 열어보도록 하겠습니다.

 

사용자 삽입 이미지

 

위 그림을 보시면 창이 세 개 있습니다. 왼쪽에는 개체 창이 있고 오른쪽 위에는 멤버 창, 오른쪽 아래는 설명 창이 있습니다.

 

개체 창에서는 .NET 프레임워크 및 COM 구성 요소, 네임스페이스, 형식 라이브러리, 인터페이스, 열거형, 클래스와 같은 것들이 포함되어 있습니다. 멤버 창에는 속성과 메서드, 이벤트, 변수, 상수, 등의 항목을 볼 수 있습니다. 마지막으로 설명 창에는 개체 창이나 멤버 창에서 선택한 항목에 대한 세부 정보가 표시됩니다.

 

 

참고:

Silverlight 어셈블리는 Silverlight 기반 응용 프로그램에서 사용되는 멤버들과 .NET 프레임워크 코드에 의해서만 참조될 수 있는 멤버들이 있습니다. Silverlight 응용 프로그램에서 사용 될 수 없는 멤버는 SecurityCriticalAttribute 속성으로 확인 가능합니다. 이 속성은 개체 브라우저에서 확인할 수는 없지만 SecurityCriticalAttribute 속성을 가진 멤버의 인텔리센스 도움말에서 접두사 “[SECURITY CRITICAL]” 을 보고 확인할 수 있습니다. SecurityCriticalAttribute 속성을 가진 멤버 사용 시, Silverlight 문서는 또한 형식과 멤버가 보안에 중요 요소로 지정됩니다. 여러분의 코드에 보안에 엄격한 멤버를 사용한다면 그 멤버를 Sivlerlight 기반 응용 프로그램에서 실행할 때 예외가 발생할 것입니다.

 


사용자 삽입 이미지

위 그림은 SecurityCriticalAttribute 속성을 가진 네임스페이스를 추가한 후 솔루션 탐색기의 상태입니다.

 

계속해서 사용자 지정 구성 요소 집합 편집 대화 상자에 대해서 알아보고 개체 브라우저 검색 범위 보기와 사용하는 방법을 알아보도록 하겠습니다.

 

아래 그림은 찾아보기 콤보 박스입니다. 그럼, 찾아보기 메뉴에 대해서 알아보도록 하지요.

사용자 삽입 이미지

찾아보기 메뉴

 

모든 구성 요소: 전체 .NET 프레임워크, 현재 솔루션 및 현재 솔루션에서 참조하는 구성 요소, 사용자 지정 구성 요소 집합 편집을 선택하여 추가한 기타 구성 요소에 있는 개체를 표시합니다.

 

<Framework Versions>: .NET Framework .NET Compact Framework의 특정 버전에 대한 개체를 표시하도록 선택할 수 있습니다. 예를 들어, 컴퓨터에 .NET Framework 2.0 .NET Framework 3.0이 설치되어 있는 경우 .NET Framework 3.0만 검색하도록 선택할 수 있습니다. 다른 프레임워크도 등록되어 있다면 이 목록에 표시됩니다.

 

사용자 솔루션: 현재 솔루션 및 참조되는 해당 구성 요소의 개체를 표시합니다.

 

사용자 지정 구성 요소 집합: 사용자 지정 구성 요소 집합 편집을 선택하여 추가한 구성 요소의 개체를 표시합니다.

 

사용자 지정 구성 요소 집합 편집: .NET, COM, 프로젝트, 찾아보기, 최근에 사용한 파일 탭으로 구성되어 있고 이 대화 상자로 개체 브라우저나 기호 찾기 대화 상자에 표시되는 구성 요소 목록을 수정할 수 있습니다.

 

위 각 항목을 참고하여 상황에 맞게 검색 범위를 적절히 선택하여 사용하시면 됩니다.

 

다음은 사용자 지정 구성 요소 집합 검색 범위에 구성 요소를 추가하는 절차입니다.

 

1. 찾아보기 콤보 박스에서 사용자 지정 구성 요소 집합 편집을 선택합니다. 아래와 같이 사용자 지정 구성 요소 집합 편집 대화 상자가 열립니다.

 

사용자 삽입 이미지

 

2. 추가하거나 제거하려는 구성 요소 형식의 탭을 선택합니다.

 

3. 구성 요소 이름을 더블 클릭합니다. 또는 Ctrl 키를 사용하여 여러 구성 요소를 선택한 다음 추가를 클릭합니다.

 

다음은 사용자 지정 구성 요소 집합 검색 범위에서 항목을 제거하는 절차입니다.

 

1. 찾아보기 콤보 박스에서 사용자 지정 구성 요소 집합 편집을 선택합니다.

 

2. 사용자 지정 구성 요소 집합 편집 대화 상자에서 선택한 프로젝트 및 구성 요소 목록의 항목을 더블 클릭합니다. 또는 Ctrl 키를 사용하여 여러 항목을 선택한 다음 제거를 클릭합니다.

 

3. 확인을 클릭하여 개체 브라우저로 돌아오고 사용자 지정 구성 요소 집합 목록에 변경 내용을 적용합니다.

 

 

참고:

사용자 지정 구성 요소 집합 검색 집합에서 구성 요소를 제거하여도 시스템에서 구성 요소가 제거되지는 않습니다. 검색할 목록에서만 구성 요소가 제거되는 것입니다.

 

 

구성 요소를 추가하는 방법은 그리 어렵진 않습니다. 여기서 참고 사항이 구성 요소 의미에 대해서 아는 것이 더 중요할 것입니다.

 

다음은 사용자 지정 구성 요소 검색 범위에 외부 구성 요소를 추가하는 절차입니다.

 

1. 찾아보기 목록에서 사용자 지정 구성 요소 집합 편집을 선택합니다.

 

2. 사용자 지정 구성 요소 집합 편집 대화 상자에서 불필요한 구성 요소를 제거하려면 제거를 클릭합니다.

 

3. 찾아보기 탭을 선택하고 해당 구성 요소에 해당하는 파일을 탐색합니다.

 

 

참고:

예를 들어, 소스 브라우저 파일 (.bsc)을 선택할 수 있습니다.

 

 

4. 선택한 구성 요소 파일을 선택한 프로젝트 및 구성 요소 목록에 추가하려면 추가를 클릭합니다.

 

5. 원하는 외부 구성 요소를 모두 선택할 때까지 3단계와 4단계를 반복합니다.

 

6. 확인을 클릭하여 개체 브라우저로 돌아오고 사용자 지정 구성 요소 집합 목록에 변경 내용을 적용합니다.

 

사용자 지정 구성 요소 집합 검색 범위에 대한 설정은 Visual Studio의 세션 간에 동일하게 유지됩니다. 선택한 구성 요소 목록은 Visual Studio 사용자 응용 프로그램 디렉터리에 저장됩니다.

 

c:\Documents and Settings\<USERNAME>\Application Data\Microsoft\VisualStudio\8.0\ObjBrowEX.dat

 

이 파일을 삭제하면 사용자 지정 구성 요소 집합 목록이 지워집니다.

 

참고 사항:

 

개체 브라우저 아이콘

사용자 삽입 이미지

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월도 끝나가네요. 비 피해 없이 여름 건강하게 보내시기 바랍니다.
음식 조심하시고 맛 있는 음식 많이 드시구요
. ^________^

다음 시간에는 개체 브라우저 어셈블리 탐색에 대해서 알아보겠습니다.
Posted by -세티-

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


이번 강좌에서 우리는 play, pause, stop 과 같은 미디어 플레이어에 필요한 버튼을 만들어 보겠습니다.

앞의 강좌에서 사용했던 버튼을 이용해서 우리는 마우스오버나 클릭과 같은 행위에 응답하는 버튼을 생성할 것 입니다. 이전에 만들어 두었던 버튼을 이용하고자 한다면 Make Control...을 이용해서 간단하게 선택할 수 있습니다.

저는 새롭게 만들어 보겠습니다.^^
먼저 사용자 컨트롤을 하나 생성합니다.
그리고 Rectangle객체를 선택하고, 그려 넣습니다.

사용자 삽입 이미지
사용자 삽입 이미지
Rectangle 객체의 모서리를 마우스로 잡고 그림처럼 화살표 방향으로 이동합니다.
그러면 모서리가 둥글게 처리 됩니다.
사용자 삽입 이미지
사용자 삽입 이미지

이제 버튼 모양이 만들어 졌습니다.

버튼에 보기 좋게 배경색을 넣겠습니다. 앞의 강좌에서도 설명했지만 그레데이션을 선택하고, 팔레트에서 두 개의 포인트를 이용하여 색상을 선택합니다.

사용자 삽입 이미지

그러면 위의 그림과 같은 버튼이 만들어지게 됩니다.
이렇게 만들어진 객체를 복사해서 새로운 버튼으로 만들겠습니다.

먼저 제일 상단 메뉴에 보면 Tool 이라는 것이 보일 것 입니다. 그곳에서 Make Control... 을 선택합니다.
그러면 다이얼로그 상자가 열리면서 컨트롤의 이름을 넣으라고 합니다.
저는 그곳에 btn_play 라는 이름을 넣었습니다.
이름을 넣고 OK를 클릭하면 솔루션 탐색기에 btn_play.xaml 파일이 생성된 것을 확인할 수 있습니다.

이제 플레이 모양을 넣기 위해 Pen 을 선택합니다.
사용자 삽입 이미지
Pen을 선택하고 그림을 그릴려고 했더니.. 오우~ 제가 Artboard를 400%로 해놓고 작업을 했었네요.^^;
100%로 축소 했더니 버튼이 콩알만 합니다. 그래서 이것을 확대할 필요가 생겼습니다.
사용자 삽입 이미지

그래서 확대 했습니다. 확대하고 나니깐 아까 모서리 둥글게 처리한게 거의 보이지 않네요.^^;
사용자 삽입 이미지

그래서 다시 모서리를 둥글게 처리 했습니다. 그랬더니 버튼 아래로 하얀 그리드가 보이네요.
사용자 삽입 이미지

그래서 아래의 그림처럼 화살표 방향으로 하얀 그리드를 마우스로 드래그 했습니다.
그랬더니 버튼까지 같이 늘어나네요. 이런 낭패가...ㅎㅎ

사용자 삽입 이미지

다시 버튼 객체를 선택하고 하얀 그리드 안에 알맞게 맞춰 넣습니다.
사용자 삽입 이미지

위에서 선택한 Pen 을 이용하여 3개 의 점을 찍었더니 삼각형이 그려졌습니다.
그런데 삼각형이 똑바르게 그려지지 않았네요.^^;
그래서 이것을 보정하고자 합니다.
사용자 삽입 이미지

Pen을 이용해서 그림을 그릴 경우 직선이나 포인트가 원하는 위치에 제대로 찍히지 않아서 원하는 모양이 나오지 않을 경우에는 아래 그림처럼 Direct Selectcion 메뉴를 이용해서 그것을 보정할 수 있습니다.
사용자 삽입 이미지

아래의 그림은 Direct Selection을 이용해서 삼각형 모양을 변형시켜 본 예 입니다.
여러분도 아래의 그림처럼 포인트를 잡고 노란 화살표 방향으로 포인트를 이동시켜 보시기 바랍니다. ^^
사용자 삽입 이미지

버튼이 너무 작아서 똑바로 그릴려고 해도 잘 되었는지 확인하기 힘드네요~
그래서 Artboard 를 400%로 확대했습니다. 우와~ 댑따 잘보이는군요.ㅋ

사용자 삽입 이미지

삼각형을 잘 그렸으나 Rectangle 객체 위에 올바르게 놓여진 것 같지는 않습니다.
그래서 Expression Blend 2.5의 왼쪽에 있는 Toolbox에서 Selection을 선택하고, Rectangle객체를 선택해서 원하는 곳으로 약간 자리 이동했습니다.
사용자 삽입 이미지
자아. 이렇게 해서 play 버튼을 만들어 보았습니다.
미디어 플레이어에는 단지 play 버튼만 존재하는 것이 아니므로 다른 버튼도 만들어 보겠습니다.
기존에 이미 만들어 놓은 버튼이 있으므로 역시 복사해서 사용하도록 하겠습니다.

앞에서는 그냥 생성해서 사용했으므로 컨트롤을 복사하는 방법에 대해 조금 자세하게 설명해 보겠습니다.
먼저 왼쪽의 Object and TimeLines에서 LayoutRoot 를 선택하고 상단메뉴에서 Tool을 선택하고 Make Control...을 선택합니다.

그러면 아래의 그림처럼 다이얼로그 상자가 열립니다. 가운데 Name 부분에 버튼 컨트롤의 이름을 입력합니다.
저는 아래의 그림처럼 이름을 btn_pause로 정했습니다.
사용자 삽입 이미지

그리고 다시 Rectangle 객체를 이용해서 일시정지 마크를 만들어서 넣었습니다.
이후 작업은 위에 설명한 것과 동일합니다.

사용자 삽입 이미지

아래의 정지 버튼도 위와 동일한 방법으로 생성합니다.
그럼 이제 원하는 버튼이 모두 생성되었겠죠? ^^

사용자 삽입 이미지

다음 시간에는 위에서 생성한 버튼을 이용하여 아주 간단한 미디어 플레이어를 만들어 보겠습니다.
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 디자이너 미리보기에 대해서 함께 알아보도록 하겠습니다.
행복한 일 가득하시길 바랍니다. ^___________^*

 

참고 사이트

응용 프로그램 개발 개요

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

안녕하세요~ 세티 입니다.
오늘은 Blend2.5를 이용해서 실버라이트로 버튼을 360도 회전 시키면서 크기를 작게 만드는 애니메이션 효과를 만들어 보겠습니다.

이러한 애니메이션 효과를 만들기 위해선 Blend에 있는 타임라인(timelines)을 사용해야 합니다. 타임라인은 두 개 또는 그 이상의 키프레임을 열거한 것을 말하고, 키프레임이란 객체의 스냅샷을 말합니다. 그럼 어떤 순간의 스냅샷을 까요? 우리는 객체의 속성에 어떤 값을 할당함으로써 그 객체의 성격을 결정할 수 있습니다.

타임라인이란

가령 예를 들어서 색상을 변경한다던가 회전 또는 크기 조절 나타나기도 하고 사라지기도 하는 부분들을 말하는 겁니다. 나타났다가 사라지는 객체를 만들기 위해서는 두 개의 키프레임(객체의 스냅샷)이 필요하겠죠.

하나의 키프레임에서는 객체의 모습이 보일 것이고 다른 하나의 키프레임에서는 객체가 사라지게 될 것입니다. 이것을 시간을 두고 배치를 하게되는데 그 때 우리는 타임라인에 키프레임을 배치한다라고 표현할 수 있는 겁니다. 그럼 타임라인에 배치된 키프레임의 시간 간격에 따라 그 객체의 성격이 자동으로 변경되겠죠.


대충 무슨 소린지 이해는 하시겠죠? 보다 확실히 이해하기 위해 간단한 예제를 통해서 위에 언급한 내용에 접근해 보겠습니다. 그것에 대한 적절한 예제 애니메이션으로는 버튼을 360도 회전시키면서 작아지고 배경색이 파란색인 버튼을 자주색으로 변경되는 애니메이션을 만들어 보겠습니다.

먼저 Blend 2.5를 이용해서 버튼 객체를 생성합니다.(이전 강좌에서 작성한 예제를 이용하셔도 됩니다.)
사용자 삽입 이미지


다음으로 타임라인 판넬을 열기 위해서 Object and Timeline Inspector를 클릭하는데 아래의 그림을 참조합니다.
사용자 삽입 이미지


적절한 타임라인 이름을 입력하고 OK를 클릭하면 아래의 그림처럼 화면이 변경된 것을 확인하게 될 겁니다. 빨간 글씨로 Timeline recording is on 이라는 부분을 볼 수 있을텐데요, 말 그대로 타임라인에 키프레임을 넣으면 되고, 알아서 그걸 잘 녹화뜨고 있다.~ 라는 의미로 받아들이면 될 겁니다.

사용자 삽입 이미지


자아~ 그럼 이제 타임라인에 키프레임을 배치해서 애니메이션을 만들어 보겠습니다.
먼저 키프레임에 넣을 객체를 만듭니다. 저는 모서리가 부드러운 파란색 그레데이션 처리가 된 버튼을 만들었습니다.

사용자 삽입 이미지


그리고 두 개의 키프레임을 준비할 것입니다. 하나는 원형 그래도 있는 객체의 스냅샷인 키프레임을 준비할 것이고요, 다른 하나는 360도 회전된 후 이미 작아져있는 그리고 배경도 자주색인 객체의 스냅샷인 키프레임을 준비할 것입니다.

키프레임을 넣기 위해선 객체의 스냅샷을 찍어야 하는데 어떻게 찍어야 할까요? 매우 간단합니다. 아래의 그림에 표시된 부분(recording keyframe)을 단지 클릭만 하면 됩니다.

사용자 삽입 이미지


가볍게 눌러보아요~ 그럼 노란색 라인에 하얀 점이 표시가 되죠? 이제 처음 시작되는 키프레임 설정이 끝난 겁니다. 그 다음으로는 두번째 키프레임을 만들어 보겠습니다.

키프레임 아래를 보면 타임라인을 확대하는 버튼이 있습니다. 타임라인은 1000%까지 확대가 가능하다고 합니다. 확대하기 위해서는 아래 이미지에 표시된 영역을 마우스로 클릭하고 적절한 숫자를 입력하면 됩니다.

사용자 삽입 이미지


이제 마우스로 노란선을 드래그 해서 0.25초 바로 앞 라인에 위치 시킵니다. 요렇게 말이죠.

사용자 삽입 이미지

이제 버튼 객체가 360도 회전할 수 있도록 애니메이션을 줍니다. 360도 회전 시키기 위해선 Transform 판넬에서 Rotate 탭을 클릭하면 됩니다.

사용자 삽입 이미지

그 다음 마지막으로 버튼의 모양을 줄이기 위해서 Scale을 조절합니다. x, y 모두 0.5 씩 입력하도록 합니다.
요렇게 말이죠.^^

사용자 삽입 이미지


그러면 모양이 요렇게 되겠죠???

사용자 삽입 이미지


그리고 타임라인에는 우리가 특별한 스냅샷을 찍는 행위를 하지 않았음에도 자동으로 키프레임이 들어가 있는 것을 볼 수 있을 겁니다. 어떻게 들어갔냐구요?? 위에 빨간 글씨로 기록중!! 이라고 써있잖아요~ ^^

사용자 삽입 이미지


자아~ 이제 만든 것을 한번 돌려볼까요??
매우 간단한 합니다. 아래 그림에 표시된를 가볍게 눌러주면 됩니다.

사용자 삽입 이미지

멋지게 회전하나요? ^^

이제 만들어진 결과물을 웹 브라우저에 출력해서 확인을 해봐야겠습니다.
타임라인이 만들어내는 애니메이션을 마우스 클릭할 때 시작될 수 있도록 CS 파일에 코딩을 해보겠습니다.
그러기 위해선 먼저 XAML코드를 건드려야 하는데요~ Grid 엘리먼트에 MouseLeftButtonDown="ButtonMouseClick" 속성과 속성값을 코딩합니다. 요렇게 말이죠.

사용자 삽입 이미지


그 다음 CS 파일에 메서드를 추가해 줍니다.
사용자 삽입 이미지


이제 모든 준비가 끝났습니다. F5 키를 눌러서 빌드하고 렌더링 된 결과를 확인해 보십시오.
이상으로 애니메이션에 대한 설명을 마치도록 하겠습니다.

         
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. 응용 프로그램 개발 개요

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


안녕하세요~ 세티 입니다.
오늘도 지난 번과 마찬가지로 실버라이트 퀵 스타트를 기준으로 번역하면서 나름 제 표현을 가미하면서 진행해 보겠습니다.

먼저 우리는 겹쳐져 있는 2개의 rectangle을 가지고 있습니다. 하나는 푸른색의 배경색을 가지고 있고, 다른 하나는 붉은 빛의 배경색을 가지고 있습니다. 이 중에서 붉은 빛의 배경색을 가지는 rectangle 을 가장 위에 둡니다. 일반적인 버튼의 경우 마우스가 버튼 위에 위치하게 되면 아무런 액션도 일어나지 않습니다. 여기서 우리는 아무 애니메이션도 없는 버튼에 애니메이션을 주기 위해 프로시저 코드를 사용할 것입니다.

예제를 위해 mouseover 이벤트를 이용하여 작성해 보겠습니다.

먼저 Blend 2.5를 실행합니다.
그리고 LayoutRoot2개의 Rectangle을 만듭니다.
먼저 처음 버튼에는 파란색 그레디언트 효과를 주었습니다.

사용자 삽입 이미지

그리고 버튼을 복사하여 하나의 Rectangle을 똑같이 붙여넣었습니다.

사용자 삽입 이미지

복사한 객체의 색상은 아래의 그림처럼 변경했습니다. 그리고 Visibility 속성을 Collapsed로 변경했습니다.

사용자 삽입 이미지

다음으로 ArtboardXAML 탭을 클릭하고, 다음의 내용을 코딩합니다.

사용자 삽입 이미지

코드를 보면 쉽게 이해하시겠지만 GridMouseEnter 이벤트와 MouseLeave 이벤트를 가지고 있습니다. 이 이벤트에 행위를 담당하게 될 C#코드의 이벤트를 연결합니다.

여기서는 Grid객체의 MouseEnter 이벤트가 실행되면 C#에서 ButtonMouseEnter 메서드가 실행될 것이고, MouseLeave 이벤트가 실행된다면 C#의 ButtonMouseLeave 메서드가 실행될 것입니다.

Grid의 이벤트가 실행될 때 특정 행위를 주기 위해 이제 C# 코드에 프로시저를 코딩합니다.
그러기 위해선 먼저 솔루션 탐색기에 있는 XAML 파일을 확장해서 C# 파일을 열어야 합니다. 아래의 그림처럼 말입니다.

사용자 삽입 이미지

그리고 Page.xaml.cs를 두 번 클릭하여 해당 파일을 오픈합니다. VisualStudio가 설치되어 있는 분은 자동으로 실행되면서 CS 파일이 오픈될 겁니다. 그 곳에 ButtonMouseEnter 메서드와 ButtonMouseLeave 메서드를 코딩합니다.

사용자 삽입 이미지

자아 이제 다 되셨으면 VS를 닫고 Blend 2.5에서 F5키를 눌러서 프로젝트를 빌드 합니다.

그러면 아래처럼 실행되면서 버튼이 하나 보일 것입니다.

사용자 삽입 이미지

위의 그림에서 설명한 것 처럼 마우스를 하얀 여백에 두었다가 배경색이 있는 Grid로 마우스를 움직여 보세요.
Grid에 마우스가 올라가는 순간 Grid에 설정된 Mouse 관련 이벤트가 작동하면서 C# 코드에 있는 해당 메서드를 실행하게 됩니다. 그러면서 아래의 그림과 같은 결과를 렌더링하게 됩니다.

사용자 삽입 이미지

어때요? 매우 이해하기 쉽죠?
오늘은 이것으로 마치겠습니다.~
Posted by -세티-
2008/07/11 01:42

[엘리의 실버라이트 2.0] 첫 인사 Silverlight2008/07/11 01:42

원글출처: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도가 넘었습니다. 작년부터 여름이 너무 습하네요. 모두들 건강하시길 바라고, 활기차고 즐겁게 여름 보내시기 바랍니다. ^.^

Posted by -세티-

원글출처: http://silverlight.net/quickstarts/blend_quickstart/part1_drawing_painting_and_text.aspx

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

아..요즘 무지 바쁜 세티 입니다. 얼른 실버라이트 소개 자료를 올려야 한다고 생각하는데 바쁘다는 핑계로 실천이 안되고 있네요. 이번주라는 고비만 넘기면 한가한 세티가 되기 때문에 다시 부지런히 올리도록 하겠습니다. ^^*

[세티의 실버라이트] 11. Expression Blend 2.5를 이용한 그리기(1)
  강좌에 이어서 계속 진행하겠습니다.

 이제 Blend를 이용해서 XAML을 코딩해 보도록 하겠습니다. XAML 문법을 다 익혀서 손으로 코딩해도 좋겠지만 도구를 사용하면 코드도 깔끔해지고, 생산성도 향상되고, 또 무엇보다 개발시 사람이기에 발생할 수 있는 의도적이지 않은 실수를 줄여주기 때문입니다.

 이번 강좌를 통해서 Blend를 이용하여 XAML 코드를 실행하고 실버라이트 애플리케이션을 빠르고 쉽게 만드는 방법을 배우게 될 것입니다. XAML 은  애니매이션 표현하는데 필요한 기능들을 가지는 Visual 객체들(예를 들어서 shape나 text, video등)이 선언되어 있고 실버라이트의 런타임에서 사용됩니다. 그러한 이유로 Blend에서 화면을 보면서 무언가를 생성해 낼 수 있습니다. 또한 Visual Basic.NET이나 C#과 같은 언어를 이용해서 Silverlight 애플리케이션을 생성하는데 사용할 수도 있습니다. 아무튼 우리는 그러한 작업에 Blend를 어떻게 이용하게 될것 인지 차츰 알아보게 될 것입니다.

자아~ 그럼 Blend안에 새로운 프로젝트를 하나 생성합니다. 이 때 화면은 Design view로 되어 있을 겁니다.

사용자 삽입 이미지

오른쪽에 있는 View 탭을 한번씩 눌러봅니다. 자 어때요? XAML view 탭을 클릭하면 Root 엘리먼트가 UserControl로 되어 있는 XAML 코드가 보이고, Split View 탭을 클릭하니깐 상단에는 Artboard가 보이고 하단에는 XAML 코드가 보이죠? ^^

우리는 이 탭을 이용해서 작업하면서 결과물을 쉽고 빠르게 확인을 해볼 수 있습니다.
이제 Blend가 잘 실행되는 것을 확인했고, 프로젝트도 잘 만들어 졌으니 객체와 속성들을 간단하게 다뤄 보겠습니다. 자아~ 그럼 따라와 보세요~

1. 마우스로 가볍게 Canvas(Artboard)를 선택합니다.
2. 그 다음에는 왼쪽에 있는 Objects and Timeline에서 LayoutRoot를 선택하고, 오른쪽에서 Properties를 선택합니다. 그러면 아래의 그림처럼 Blend가 바뀌게 될 겁니다.
사용자 삽입 이미지
3. 그 다음에 오른쪽 하단에 있는 배경색 설정판에서 적절한 색을 선택합니다.
사용자 삽입 이미지

아 여기서 참 Blend는 재미있는 기능을 하나 제공합니다. 그게 뭐냐면 Property를 검색해 주는 검색 기능이 들어가 있다는 겁니다. 아래 그림 처럼 말이죠.
사용자 삽입 이미지

저는 Width라는 속성을 찾기 위해 검색 키워드를 입력해 보겠습니다. 여러분도 입력해 보세요~
와~ 어떠세요??? 저랑 똑같은 결과가 나왔나요??? 전 아래 그림 처럼 결과가 나왔습니다.
사용자 삽입 이미지
오홍~ 멋지죠?? ^^ 이렇게 쉽게 원하는 Property를 찾을 수 있도록 기능도 제공하고 있습니다.
흠흠~ Cool~ 한 사용자 경험을 위해 멋지게 노력한 흔적이 보입니다.^^

배경색을 설정했으므로 Rectangle 객체를 이용하여 무언가를 만들어 보도록 하겠습니다.

4. 도구상자에서 Rectangle을 선택합니다.
5. 그리고 선택한 RectangleCanvas 위에 적절하게 그려 줍니다.

사용자 삽입 이미지

아참... 위 그림에서 왼쪽의 도구상자를 보면 하단에 오른쪽으로 하얀색 삼각형 표시가 조그맣게 붙어있는 걸 볼 수 있죠? 그 표시는 여러개의 객체를 가지고 있다는 표시 입니다. 마우스로 그 부분을 꾹 눌러보세요~
그럼 또 다른 객체들을 확인할 수 있습니다. 요렇게 말이죠. ^^
사용자 삽입 이미지

Canvas에 그려진 Rectangle의 네 귀퉁이를 둥글게 처리할려고 합니다. 왜 둥글게 처리하냐구요?? ㅎㅎ
버튼을 만들려고 하기 때문입니다.^^

6. 마우스로 객체를 다시한번 선택해 주고 PropertyAppearance를 찾아서 RadiusXRadiusY 값을 설정해 줍니다. 전 둘다 16으로 설정했습니다.
RadiusX = 16, RadiusY = 16

사용자 삽입 이미지

그랬더니 짜잔~ 네모박스의 네 귀퉁이가 모두 둥글게 변한 걸 확인해 볼 수 있을 겁니다.
흠~ 멋지네요.

Objects and Timeline Inspector의 rectangle에 마우스를 올리고 오른쪽 버튼을 클릭하여 이것의 이름을 변경합니다. 이 객체에 지정되는 이름은 code에서 객체로 접근하기 위해 사용됩니다. 강좌 후반부에는 code에서 객체의 이름을 이용하여 접근하는 것을 보게될 것입니다.
사용자 삽입 이미지
전 이 객체의 이름을 SetiObject 라고 설정 하겠습니다.

또한 이 객체를 별도의 컨트롤로 분리할 수도 있습니다. 분리하는 방법은 rectangle 객체에 마우스를 올리고 오른쪽 버튼을 클릭하면 열리는 Action Panel에서 Make Control...을 선택하는 겁니다.
사용자 삽입 이미지

가볍게 객체에 마우스를 올리고 Make Control..을 선택합니다.
사용자 삽입 이미지

그러면 객체의 이름을 적는 다이얼로그 상자가 활성화 되고, 원하는 컨트롤의 이름을 적습니다. 기본적으로 객체이름 뒤에 Control 이 붙어서 표시되는데 이 예제에서는 SetiObjectControl 로 표시됩니다.
사용자 삽입 이미지

자아~ 가볍게 OK 를 눌러봅니다.

오~ 그랬더니 변화가 생겼습니다. 기존 Page.xaml 코드에는 컨트롤에 대한 XAML 코드가 생기고, 솔루션 탐색기에는 새롭게 생성된 SetiObjectControl에 대한 SetiObjectControl.xaml 이 생성되었습니다.
사용자 삽입 이미지

아래는 생성된 SetiOjectControl에 대한 XAML 코드 입니다.
사용자 삽입 이미지

또한 탐색기의 SetiObjectControl.xaml 을 확장해 보면 SetiObjectControl.xaml.cs 파일이 있는 것을 볼 수 있습니다. 이 파일은 C#을 위한 파일이며, 객체를 제어할 코드 넣을 수 있도록 되어 있습니다.
사용자 삽입 이미지

이렇게 분리된 XAML 파일에 행동 제어를 위한 C# 코드와 XAML 코드가 한 쌍으로 이루어짐으로써 효과적인 사용자 컨트롤(User Control)을 만들 수 있게 되는 겁니다.

이 컨트롤에 배경색을 넣어보도록 하겠습니다.
먼저 ArtboardView 탭을 Design 탭으로 다시 변경하고, 왼쪽의 Object and Timelines에서 객체의 Root인 LayoutRoot를 선택합니다. 그리고 Blend 툴의 제일 오른쪽에 있는 Properties를 선택합니다.
사용자 삽입 이미지

Brush에서 Background를 선택합니다.
사용자 삽입 이미지

이제 Rectangle 객체 안에 색을 채워 넣겠습니다. Blend 툴의 왼쪽에 위치한 Object and Timelines에서 SetiObject를 선택합니다. 그러면 위에서 배경색을 채우는데 사용했던 BrushesFill로 변경되는 것을 확인할 수 있습니다.
사용자 삽입 이미지

그 다음으로 그레디엔트를 선택하고 Rectangle을 채웁니다.
Blend 툴은 아래 그림에서 보는 것처럼 여러 곳에 포인트를 찍고 디자이너가 부분적으로 색을 달리해서 적용할 수 있도록 되어 있습니다.
사용자 삽입 이미지

보통 Glass Layer 같은 것을 만들 때 이 기능을 사용합니다. glass 효과를 주기 위해 아래와 같은 설정을 줍니다.
그레디엔트 포인트 1 알파값 75%
그레디엔트 포인트 2 투명
그레디엔트 포인트 3 알파값 75%
그레디엔트 포인트 4 투명
그레디엔트 포인트 5 알파값 75%
그레디엔트 포인트 6 투명


이렇게 설정을 하게 되면 아래의 그림과 같은 효과를 만들어 낼 수 있습니다.
사용자 삽입 이미지

만들어 놓고 보니깐 Artbord에 있는 이미지가 너무 작아 보입니다. 이것은 아래 그림에 나오는 부분에서 크기를 조절하여 확대해서 볼 수 있습니다.
사용자 삽입 이미지

자아 이제 마지막으로 Rectangle 객체 안에 채워진 그레디엔트를 사선으로 만들어 보겠습니다.
아래 그림 처럼 하시면 됩니다.^^
사용자 삽입 이미지

오왕~ 되게 쉽죠?? ㅎㅎ

이것으로 Blend 2.5를 이용한 그리기 강좌를 마치겠습니다.
수고 하셨습니다.~
Posted by -세티-

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

안녕하세요~ 세티 입니다.

이번 시간에는 Expression Blend2.5를 이용하여 버튼을 만들어 보겠습니다. 버튼을 만들면서 Expression Blend2.5 에 대한 적응력도 키우고, 버튼을 만드는 것과 같은 간단한 작업을 함께 함으로써 실버라이트에 대한 이해력도 더욱 늘려보는 계기로 삼을까 합니다.

지난 강좌에서 Expression Blend 2.5를 설치해 봤습니다. 설치된 도구를 실행합니다.

사용자 삽입 이미지


네에~ 아주 실행이 잘 되는군요~ Expression Blend 2.5를 실행하면 Project를 실행할거냐? Help 파일을 볼거냐? 아니면 Sample 파일을 볼거냐 하고 묻는 창이 하나 뜹니다. 우리는 여기 Project를 선택하고 New Project를 선택해 봅니다.
사용자 삽입 이미지


와~ 선택했더니 New Project 팝업에서 Project type을 선택하라고 합니다. 여기서 언급되는 Project type에 대해 간략하게 설명하고 넘어가겠습니다.
사용자 삽입 이미지

WPF Application(.exe) - 실행 가능한 WPF 응용 프로그램을 생성할 때 선택합니다.
WPF Control Library - 단독 실행이 불가능한 dll과 같은 WPF 컨트롤을 만들 때 선택합니다.
Silverlight 1 Site - JS를 이용한(닷넷이 아닌) 실버라이트 웹 사이트를 만들 때 선택합니다.
Silverlight 2 Application - 닷넷언어를 이용한 실버라이트 애플리케이션을 만들 때 선택합니다.


자아 우리는 여기서 Silverlight 2 Application을 선택합니다. 그리고 OK를 누릅니다.
그러면 가운데에 아무것도 없는 하얀판이 하나 있고, 오른쪽에는 SetisSilverlight라는 솔루션과 프로젝트 그리고 기타 폴더와 xaml 파일이 나타나게 됩니다.
사용자 삽입 이미지

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

데스크탑에 IIS(웹서버,Internet Information Server)가 없다면 가상 IIS를 만들어서 웹 애플리케이션을 실행할 수 있도록 도와줍니다. 이 가상 IIS 기능은 웹 개발의 편리성을 위해 Visual Studio 2005 에서 처음 소개 되었으며, 제작중인 웹 애플리케이션을 테스트 하는데는 더할나위 없을 만큼 편리한 도구 입니다. 물론 FTP나 기타 고급 기능은 제공하지 않고 있습니다.^^

이제 웹 브라우저를 닫고, Expression Blend 2.5 를 다시 봅니다.
언제나 그렇듯 이런 낯선 도구를 만나면 한숨부터 나옵니다. 휴우~ 뭔가를 또 알아야 한다는 그 부담감...
그 부담감을 즐거움으로 승화시키는 것이 어렵긴 하지만 우리는 엔지니어 이거나 디자이너 이거나 배우는 학생이거나 하기 때문에 어쨋든 이 고비를 넘어야 합니다. Expression Blend 2.5 라는 도구와 친해지는 것만이 낯설음을 친숙함으로 변화시키는 지름길인 것 같습니다. 전체적으로 한번 쭉 훝어보기 보다는 천천히 한 부분씩 잘라서 살펴보는게 좋을 것 같습니다.

왼쪽부터 한번 살펴볼까요?
사용자 삽입 이미지

옆의 그림처럼 가장 왼쪽에 있는 것이 Toolbox(도구상자) 입니다.
위에서 Expression Blend 2.5 를 실행했을 때 가운데 하얀판 보이던거 있죠?
그게 Artboard라고 하는 겁니다. 그 ArtboardToolbox에 있는 것(객체, object)을 선택해서 올려놓을 수 있는 것이죠.

그런데 이 Toolbox가 기존 Visual Studio 에 있는 Toolbox 보다 조금 더 강화된 사용자 경험(여기서의 사용자는 개발자와 디자이너 입니다.)을 포함한 것 같습니다. Toolbox에 있는 ">>" 이걸 클릭하면 Asset Library라는 팝업이 하나 열리는데요~ Expression Blend 2.5에서 지원하는 컨트롤들을 Gallery type,Detail type으로 분리해서 보여주거나 Search 기능을 두어 쉽게 찾아볼 수 있도록 한 점, 그리고 객체들의 네임스페이스를 Detail에서 제공하고 있는 점 등이 매우 맘에 듭니다.


그 바로 옆에는 객체타임라인 Inspector가 보입니다. 이 패널은 artboard 상의 모든 객체를 보여주며, 애니메이션을 위한 타임라인도 생성할 수 있게 해줍니다.
사용자 삽입 이미지

그 다음 가운데로 이동하여 하얀판을 봅니다 이 하얀판은 Artboard라고 하며 Design View라는 이름으로 부를 수도 있습니다.
사용자 삽입 이미지

Artboard는 우리가 생성할 웹 애플리케이션의 디자인 UI를 보여줍니다. Artboard의 오른쪽에 보면 Design, XAML, Split라는 탭이 있으며, 그것을 클릭하면 선택된 형태로 결과를 보여줍니다.

사용자 삽입 이미지
마지막으로 가장 오른쪽을 봅니다.

이것은 탐색기라고 해도 좋을 것 같은데 Table이라고 불러도 좋을 것 같습니다.

전 탐색기라는 표현이 더 좋기 때문에 그냥 탐색기라고 부르겠습니다. 탐색기의 위에 보면 3가지의 탭이 있습니다. Project Tab을 클릭하면 솔루션 탐색기가 짜잔~ 하고 열립니다.

그리고 Property를 클릭하면 객체의 Property를 설정할 수 있는 화려한 도구가 나타납니다. 그리고 Resource를 클릭하면 현재 Artboard상에서 사용되는 객체중에서 마우스로 선택된 객체의 리소스를 확인할 수 있습니다.




[세티의 실버라이트] 11. Expression Blend 2.5를 이용한 그리기(2) 에서 이어서 다루겠습니다.
Posted by -세티-

원글출처: http://www.microsoft.com/expression/products/Features.aspx?key=blend2dot5
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.

안녕하세요~ 세티 입니다.^^
오랜만에 다시 강좌를 시작합니다.~ 잠시 재충전의 시간을 가지고 싶었거든요.ㅎㅎ

지난 강좌에서는 실버라이트 1.0을 이용하여 실버라이트 애플리케이션을 만들어 보았습니다. 예제를 하나하나 따라하면서 XAML 코드를 직접 코딩하다 보면 실버라이트에 대해 감을 잡을수 있어서 좋습니다. 그러나 좀 더 복잡하고 다양한 효과를 위해선 보다 복잡해지는 XAML 코드가 만들어지게 될텐데요~

이것을 일일이 손으로 코딩한다는 것은 생산성이나 기타 효율적 측면에서 매우 안타까운 일임에는 틀림없을거 같습니다. 그래서 우리는 Expression Blend 2.5 라는 툴을 이용해서 실버라이트에 대한 학습을 이어가 볼까 합니다.

이번 학습을 하는데 필요한 도구의 다운로드 주소는 다음과 같습니다.
다운로드 : Expression Blend 2.5 June 2008 Preview 다운로드

사용자 삽입 이미지
링크를 클릭하면 Expression Blend 설치 위자드가 나옵니다. 가벼운 마음으로 Next를 클릭합니다.

사용자 삽입 이미지
오~ 라이센스에 동의하겠냐고 묻는 화면이 나옵니다.
너무 당연한 거지만 동의해야 쓸 수 있겠죠? ㅋ 가볍게 동의해 줍니다. Next~
사용자 삽입 이미지
뭔가 표준설치 하겠냐 아니면 선택해서 설치할거냐 전체 설치할거냐 하고 묻는 화면이 나옵니다.
학습할 때는 뭔가 다 준비해놓고 학습하면 나중에 재설치할 필요가 없으니 아주 편합니다.
가볍게 Complete를 선택하고 Next를 클릭합니다.
사용자 삽입 이미지
설치하겠냐고 묻죠? Install을 클릭합니다. ^^
사용자 삽입 이미지
설치가 쭉 되는 화면을 볼 수 있습니다.
사용자 삽입 이미지

설치를 다 했다고 알려주는군요~ 오.. 제법 빨리 설치됩니다. 용량도 작구요..ㅎㅎ
설치가 다 되면 시작 프로그램에서 Expression Blend를 찾아서 실행해하면 아래와 같은 프로그램이 실행되는 것을 확인할 수 있습니다.
사용자 삽입 이미지

사실 이런 설치과정을 강좌에 넣고 싶진 않았지만 그래도 MS 도구에 친숙한 분들이라면 모를까 처음 접근하는 분들이나 또는 MS 도구에 친숙하지 않은 분들은 설치과정을 하나하나 확인하고 싶어할 수도 있다는 생각에 강좌의 제일 첫 글로 넣어봤습니다.

다음 강좌 부터 Expression Blend를 이용한 본격적인 학습을 시작하도록 하겠습니다.^^ 
Posted by -세티-

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

애니메이션
(animation)



실버라이트는 애니메이션을 정의하기 위해 마크업을 사용할 수 있습니다. 이번 강좌에서는 실버라이트 애니메이션 애니메이션 생성 과정을 통해 실버라이트의 특징을 살펴볼까 합니다.

먼저 실버라이트 애니메이션을 위한 간단한 샘플이 필요합니다. Ellipse 를 이용하여 간단한 샘플을 만들어 보겠습니다.

사용자 삽입 이미지

사용자 삽입 이미지

위의 코드를 주의깊게 보셔야 합니다. 어느 부분을 주의깊게 보셔야 하냐면 Ellipse의 이름 부분 입니다.

                                                                x:Name = "ellipse"


ellipse를 애니메이션화 할 때 이름이 필요합니다. XAML로 정의된 애니메이션이 저 이름을 타겟으로 하기 때문입니다. 이제 우리는 애니메이션을 시작하기 위해 EventTrigger를 생성해야 합니다.

먼저 코드를 가져다 놓고 설명해 보겠습니다.
사용자 삽입 이미지

위의 코드를 한줄 한줄 번역해 보겠습니다.

먼저 <Canvas.Triggers
> 가 보입니다.
Triggers의 단어 의미가 '방아쇠' 라고 나오죠? 트리거라는 의미가 '무언가가 무언가를 하기 위해 시작했다.' 라는 의미로 받아들이시면 편합니다.ㅡㅡ; 음 좀 더 쉽게 말해서 총알이 나갈려면 무언가가 총알을 때려야 하지 않습니까? ^^; 그리고 그 무언가로 총알을 때릴려면 우리는 방아쇠를 당겨야 하구요.~ 우리가 총알을 날리기 위해 총의 방아쇠를 당겨야 하듯이 말입니다. 그런 의미에서 Canvas가 무언가를 하기 위해 방아쇠 당길 준비를 하고 있다고 생각합시다.

그 다음으로 <EventTrigger RoutedEvent="Canvas.Loaded"
>라는 코드가 보입니다.
자~ 총의 방아쇠를 당겨야 하는데 언제 당길까요? 무언가가 가서 총알을 쳐야 겠지요? 그럼 언제 총알을 쳐야할까요? 바로 Canvas가 로드 될 때 입니다.^^*

자 다음 코드는 뭘까요?
오호 <EventTrigger.Action>이라고 되어 있네요? 자아 이 부분은 방아쇠가 당겨졌을 때 총알이 날라가듯 그런 총알과 같은 Action을 기록하는 부분 입니다.
총알의 화약이 폭발하고, 화약의 반발력에 의해 총알이 어디론가 튀어나가고... 가다가 어디 부딪히거나 중력에 의해 땅으로 떨어지거나 하겠죠?? ㅎㅎ 이런 일련의 스토리를 Action은 가지고 있습니다.
그 부분은 어디에 기록하냐구요? 바로 <BeginStoryboard></BeginStoryboard> 입니다.
와~ 얼마나 직관적 입니까? 스토리시작~~!! ㅎㅎ
아무튼 이러한 Storyboard는 하나 이상의 애니메이션을 컨트롤하거나 정의하는데 사용됩니다.

자아~ 애니메이션을 하나 만들어 봅시다.
우리는 간단한 실습을 위해서 DoubleAnimation 엘리먼트를 사용하려고 합니다. DoubleAnimation Class는 두 대상값을 지정하면 그 사이에서 값을 전환하면서 애니메이션을 생성하게 됩니다.
사용자 삽입 이미지
사용자 삽입 이미지


위의 코드도 천천히 해석해 보도록 하겠습니다.

위에 언급한대로 두 점 사이에서 애니메이션이 발생하도록 <DoubleAnimation> 엘리먼트를 <Storyboard> 안에 넣습니다. 그리고 이 Storyboard의 주인공이 될 엘리먼트를 지정합니다. 여기서는 ellipse가 되겠네요.
그래서 stroryboard.TargetName = "ellipse" 라고 합니다.
DoubleAnimation이 두 점 사이의 값을 이용한 애니메이션 발생에 필요한 엘리먼트 이기 때문에 나머지 한 점의 값을 설정합니다. 이미 Ellipse에는 한점(Canvas.Left = "30") 이라는 값이 설정되어 있으므로 <DoubleAnimation>Storyboard.TargetProperty 속성값으로 "(Canvas.Left)"를 설정하고 To="300" 을 설정해서 30px 에서 300px 까지 왼쪽에서 오른쪽으로 움직이도록 설정합니다.
그리고 마지막으로 Duration = "0:0:1" 을 설정하게 되는데 이것은 애니메이션되는 Ellipse의 애니메이션 시간을 의미합니다. (약 1초 일 겁니다.^^;)

그럼 이어서 애니메이션의 또 다른 타입에 대해 알아보겠습니다.
실버라이트는 앞에 언급한 DoubleAnimation 처럼 ColorAnimation과 PointAnimation 이라는 것도 지원합니다.
오호~ 두 가지 애니메이션이 뭘 하는 건지 대충 감이 오죠? ^^
바로 색상과 포인트를 지원하는 애니메이션 입니다.
역시 또 코드를 보면서 이해의 폭을 넓혀 가보도록 하겠습니다.

사용자 삽입 이미지
먼저 Storyboard 엘리먼트를 보겠습니다. 그 내부에 보면 ColorAnimation 엘리먼트가 2개 위치하고 있습니다.
앞의 코드에서 방아쇠 언급하면서 상세하게 코드를 설명했으니 이번엔 대충 보셔도 아하~ 하면서 눈치챌 수 있을 겁니다. 2개의 ColorAnimation 엘리먼트는 역시나 각각의 Ellipse 엘리먼트를 가리키고 있네요.

 <ColorAnimation
               Storyboard.TargetName="e1_brush"
               Storyboard.TargetProperty="Color"
               From="Red" To="Blue" Duration="0:0:5" />

해석해 보면 ColorAnimatin 엘리먼트가 가리키는 객체의 이름은 "e1_brush" 이고, 이 ColorAnimation이 가리키는 속성은 Color이며, Red에서 Blue로 5초 동안 변화시켜라.
그럼 이 객체가 가리키는 엘리먼트는 무엇일까요?

 <Ellipse.Fill>
      <SolidColorBrush x:Name="e1_brush" Color="black"/>
 </Ellipse.Fill>


바로 이 코드 입니다. Ellipse.Fill or Ellipse.Shape를 써서 그리고자 하는 형태를 지정하면 될 것이구요~
Ellipse의 기본 컬러가 black으로 지정되어 있습니다. 이 코드가 Ellipse 객체에 색상을 채워주는 역할을 합니다. 아마 이 예제를 실행하면 저 black은 너무 순간적이라 체크하기 어려울 것입니다. 저 부분을 green으로 변경하고 Duration 을 1분으로 설정해 보시면 시작할 때 설정된 green과 ColorAnimation에 설정한 From = "red" 에 의해 첫 시작시 색상이 다홍색 으로 보이는 것을 확인할 수 있습니다.

자 두번째 ColorAnimation의 동작은 위와 동일하지만 코드가 약간 다르네요.
 <ColorAnimation
               Storyboard.TargetName="e2"
               Storyboard.TargetProperty="(Fill).(Color)"
               From="Red" To="Blue" Duration="0:0:5" />

타겟속성이 아예 Fill의 Color라고 직접적으로 명시되어 있군요.
그럼 Ellipse 엘리먼트는 어떻게 되어 있을까요?

<Ellipse x:Name="e2" Fill="Black"
      Height="100" Width="100" Canvas.Left="30" Canvas.Top="130"/>


보시는 것처럼 Ellipse 엘리먼트에 Fill 속성이 있고, 색상이 직접 할당되어 있는 것을 확인할 수 있습니다.
결국 동작은 2가지 타입 동일합니다.

아래는 색상이 변화하는 과정을 이미지로 캡쳐해 본 것 입니다.

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

음~ 역시 신기합니다.^^
이렇게 우리는 적당한 시간을 주고 객체의 변화를 실감나게 지켜볼 수 있는데요~ 앞에 언급한 StoryboardDoubleAnimation 객체는 Timeline 객체 타입 입니다.

아래는 Timeline이 가지는 유용한 속성입니다.
Storyboard.TargetName : 애니메이팅 하기 위한 객체의 이름
Storyboard.TargetProperty : 애니메이팅하기 위한 속성
BeginTime: 이 속성에 단지 "2"라는 숫자만 넣으면 이틀 뒤에 움직입니다. ㅡㅡ; 그래서 하나의 문법을 따라야 하는데 hours:minutes:seconds 라는 룰을 따라야 하고 다음과 같이 표시할 수 있습니다.
"0:0:2"
이렇게 설정하면 2초 뒤에 애니메이션이 시작합니다.
Duration : timeline의 길이를 의미합니다. 즉 애니메이션이 설정된 시간만큼 움직인다는 뜻이죠.

아래의 코드를 복사하여 예제로 만든 xaml 코드에 붙여넣고 직접 실행하고 결과를 확인해 보시기 바랍니다.
그리고 값을 변경해가면서 어떻게 애니메이션이 움직이는지 결과를 눈으로 직접 확인해 보시면 코드를 이해하는데 많은 도움이 될 것 입니다.

<Canvas
    xmlns="
http://schemas.microsoft.com/client/2007"
    xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml">
  <Canvas.Triggers>
    <EventTrigger RoutedEvent="Canvas.Loaded">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard
              Storyboard.TargetName="e1"
              Storyboard.TargetProperty="(Canvas.Left)"
              BeginTime="0:0:5">
            <DoubleAnimation To="300" />
            <DoubleAnimation To="300" Storyboard.TargetName="e2"/>
            <DoubleAnimation To="80" Storyboard.TargetName="e3" Storyboard.TargetProperty="Width"/>
            <DoubleAnimation From="200" To="300" Storyboard.TargetName="e4"/>
            <DoubleAnimation To="300" Duration="0:0:5.3" Storyboard.TargetName="e5"/>
            <DoubleAnimation FillBehavior="HoldEnd" To="200" Storyboard.TargetName="e6"/>
            <DoubleAnimation FillBehavior="Stop" To="200" Storyboard.TargetName="e7"/>
            <DoubleAnimation RepeatBehavior="Forever" To="300" Storyboard.TargetName="e8"/>
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
  </Canvas.Triggers>
  <Ellipse x:Name="e1" Fill="Black"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="30"/>
  <TextBlock Canvas.Left="0" Canvas.Top="30">e1</TextBlock>
  <Ellipse x:Name="e2" Fill="Red"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="50"/>
  <TextBlock Canvas.Left="0" Canvas.Top="50" Foreground="Red">e2</TextBlock>
  <Ellipse x:Name="e3" Fill="Purple"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="70"/>
  <TextBlock Canvas.Left="0" Canvas.Top="70" Foreground="Purple">e3</TextBlock>
  <Ellipse x:Name="e4" Fill="Blue"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="90"/>
  <TextBlock Canvas.Left="0" Canvas.Top="90" Foreground="Blue">e4</TextBlock>
  <Ellipse x:Name="e5" Fill="Green"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="110"/>
  <TextBlock Canvas.Left="0" Canvas.Top="110" Foreground="Green">e5</TextBlock>
  <Ellipse x:Name="e6" Fill="Black"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="130"/>
  <TextBlock Canvas.Left="0" Canvas.Top="130" Foreground="Black">e6</TextBlock>
  <Ellipse x:Name="e7" Fill="Orange"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="150"/>
  <TextBlock Canvas.Left="0" Canvas.Top="150" Foreground="Orange">e7</TextBlock>
  <Ellipse x:Name="e8" Fill="Red"
      Height="20" Width="20" Canvas.Left="30" Canvas.Top="170"/>
  <TextBlock Canvas.Left="0" Canvas.Top="170" Foreground="Red">e8</TextBlock>
</Canvas>

이상 입니다. ^^

Posted by -세티-
2008/06/09 09:00

[세티의 실버라이트] 8. 미디어 Silverlight2008/06/09 09:00

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

미디어
(Media)


이번 시간에는 실버라이트가 제공하는 미디어엘리먼트(MediaElement)에 대해 알아보겠습니다. 실버라이트의 MediaElement 객체는 WMVWMA파일, mp3와 같은 타입의 파일을 플레이하기 위해서 사용합니다.

MediaElement에 대해 알아보기 위해 우리는 웹 페이지에 미디어 파일을 추가 하고 유용한 MediaElement 속성과 미디어를 재생하는 컨트롤 방법을 다뤄보고 풀-스크린으로 미디어를 재생해 보고 비디오를 이용한 페인팅을 다뤄보겠습니다.

먼저 학습을 위해 간단한 샘플을 만들겠습니다. 그러기 위해선 하나의 웹 페이지를 생성하고 그 속에 미디어를 삽입하도록 하겠습니다.

작업순서.
1. Canvas 태그에 MediaElement를 추가합니다.
2. Source 속성에 URI 경로를 설정합니다.


아래는 예제 코드 입니다.
사용자 삽입 이미지
사용자 삽입 이미지

와~ 단 한줄의 코드로 미디어를 재생할 수 있다니... 정말 대단합니다.^^

실버라이트 XAML 코드는 앞의 강좌에서 언급했듯이 엘리먼트 하나하나가 속성을 가지고 있고, 또 객체로 되어 있습니다. 그래서 보다 다양한 멀티미디어 효과를 줄 수 있고, 보다 쉽게 그러한 기능들을 추가할 수 있습니다. 앞에 만든 미디어에 동그란 원을 하나 추가 해보겠습니다. 동그란 원을 추가 위해서 Ellipse 엘리먼트를 사용하도록 하겠습니다.
사용자 삽입 이미지
사용자 삽입 이미지

이야~ 렌더링이 잘 되었군요. 요즘 인기 많은 소녀시대의 '채연' 님을 동그란 원안에 넣어봤습니다.^^;
음! 여러 UI엘리먼트를 조합해서 원하는 결과물을 정말 쉽고 편하게 만들어 낼수 있겠군요.

계속 이어서 MediaElement에 대해 조금 더 알아보겠습니다. 다른 엘리먼트들과 마찬가지로 MediaElement도 몇 가지 유용한 속성을 가지고 있습니다.

MediaElement를 위한 유용한 속성값은?
Stretch - MediaElement에 비디오를 채운다. 가능한 값으로는 None, Uniform, UniformToFill 그리고 Fill 이 있으며, 기본값은 Fill 입니다.


사용자 삽입 이미지

Stretch = "none" 일 때


사용자 삽입 이미지

Stretch = "UniformToFill"일 때

그 다음으로는 볼륨과 관련된 속성이며, IsMutedVolumn 이 있습니다. 미디어가 소리 조절이 안되면 안되겠죠.^^;
IsMuted - true와 false를 설정할 수 있으며, 기본값은 false 입니다.
Volumn - 0에서 1까지 설정이 가능하며 기본값은 0.5 입니다.


다음으로는 미디어 재생과 관련된 메서드가 있겠는데요~ Play, Pause, Stop 메서드를 사용하여 미디어 재생을 컨트롤 할 수 있습니다. 미디어 재생과 관련된 예제 코드는 아래와 같습니다.
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

그러나 이러한 미디어를 작은 화면으로 본다는 것은 너무 답답한 일임에 틀림없습니다.^^
따라서 우리는 이 미디어를 풀-스크린 모드로 보기를 원하며, 또 그렇게 되어야 할 것입니다.
미디어 재생에서 실버라이트 플러그-인의 FullScreen 속성을 설정하기 위해서는 ActualWidthActualHeight의 사이즈를 설정해야 합니다.

아래의 코드를 위에 작성한 코드에 추가 합니다. 추가할 코드는 다음과 같습니다.

<!-- 풀 스크린 모드를 위한 XAML 코드 -->
    <Canvas MouseLeftButtonDown="toggle_fullScreen"
      Canvas.Left="190" Canvas.Top="265">
      <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
         Height="30" Width="85">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Gray" Offset="0.0" />
            <GradientStop Color="Black" Offset="1.0" />       
          </RadialGradientBrush>
        </Rectangle.Fill>
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5"
        Foreground="White" >full screen</TextBlock>
    </Canvas> 

풀-스크린 제어와 관련된 메소드는 이미 위의 js 파일에 추가해 놓았으며, 해당 메소드의 이름은 canvas_loaded(Object, Param), toggle_fullscreen(Object, Param), onFullScreenChanged(Object, Param) 입니다.

여기까지는 기본적인 미디어 기능이었습니다. 하지만 요즘처럼 다양한 멀티미디어 콘텐츠가 응용되는 세상에서 단순하게 미디어 재생만 된다면 좀 재미가 없겠죠? 그래서 소개할려는 것이 비디오브러쉬 입니다.
우리는 실버라이트 MediaElementVideoBrush 기능을 사용하여 글자의 배경에 미디어를 재생할 수 있습니다.

VideoBrush 기능을 사용하기 위해선 아래와 같은 순서로 작업을 해야 합니다.
1. VideoBrush 엘리먼트를 생성합니다.
2. MediaElement를 생성하고 Name을 할당합니다.
3. MediaElement의 Opacity를 0.0으로 설정합니다.


아래는 예제 코드 입니다.
사용자 삽입 이미지
사용자 삽입 이미지


VideoBrush를 이용해서 MediaElement에 미디어를 정지, 잠시정지, 재생등을 할 수는 있지만 MediaElement의 크기를 변경할 수는 없습니다. 이와 같은 기능을 원한다면 multiple VideoBrush 객체를 이용해야 합니다.
이상으로 실버라이트가 제공하는 미디어 기능에 대해 간단하게 살펴보았습니다.

Posted by -세티-
2008/06/04 02:02

[세티의 실버라이트] 7. 텍스트 Silverlight2008/06/04 02:02

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

텍스트
(TEXT)

안녕하세요~ 세티 입니다. 이번 시간에는 실버라이트에서 지원하는 TextBlock 엘리먼트의 특징에 대해 살펴보겠습니다. TextBlock 엘리먼트는 실버라이트에 텍스트를 추가하는데 사용되는 엘리먼트 입니다

머 맨날 말로만 하는 것보다는 역시나 직접 만들어 보는게 훨씬 낫겠죠?
먼저 <canvas>의 하위에 자식 엘리먼트로 <TextBlock> 태그를 넣습니다. 그리고 시작 블럭과 끝 블럭 사이에 적절한 문자열을 집어 넣습니다. 저는 "SETI's Silverlight" 라는 글자를 넣도록 하겠습니다.
사용자 삽입 이미지
사용자 삽입 이미지

멋지게 렌더링된 결과를 볼 수 있습니다. 추가적인 설명을 하자면 앞서 언급한 Clip과 Opacity, 그리고 이번에 언급중인TextBlock 엘리먼트와 같은 UIElement 들은 속성값 설정을 통해 그 결과를 렌더링 하게 됩니다.
TextBlock 엘리먼트는 다음의 속성들을 포함합니다.
  • FontSize - 픽셀 단위
  • FontStyle - 이탤릭이나 노멀을 선택
  • FontStretch - UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, Normal, Medium, SemiExpanded, Expanded, ExtraExpanded, 또는 UltraExpanded를 선택
  • FontWeight - Extralight, Thin, light, normal, medium, senibold, bold, extrabold, black, extrablack을 선택
  • FontFamily
  • Foreground

이 속성을 TextBlock 엘리먼트에 사용하고, 그것을 렌더링 했을 때의 결과는 아래와 같습니다.

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

TextBox 엘리먼트에 Run 엘리먼트를 추가 사용함으로써 TextBlock에 다른 폰트 속성을 적용할 수 있습니다.
사용자 삽입 이미지
사용자 삽입 이미지

FontFamily는 첫번째에 설정된 폰트를 이용하지 못할 때 그 다음 폰트를 이용하고자 할 때 사용되며, "Portable User Interface" 라는 속성값은 디바이스의 특성과 관계없이 모든 기계에서 항상 이용이 가능합니다. 아래는 FontFamily에 대한 코드와 렌더링 결과 입니다.
사용자 삽입 이미지
사용자 삽입 이미지

이상으로 TextBlock과 그 속성들에 대해 살펴 보았습니다.  다음 시간에는 실버라이트를 이용한 Media 엘리먼트에 대해 살펴보도록 하겠습니다.

Posted by -세티-
2008/06/01 17:37

[세티의 실버라이트] 6. Images Silverlight2008/06/01 17:37

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


이미지
(Images)


앞에서 우리는 실버라이트에서 사용 가능한 여러가지 엘리먼트들을 살펴 보았습니다. 기억해 두셔야 할 점은 앞 강좌에서 다룬 실버라이트 엘리먼트가 전부는 아니라는 점 입니다.
매우 기초적인 내용을 다루었고, 그러하기 때문에 알아야 할 것들이 그 만큼 많음을 기억해주셨으면 합니다.

자아~ 아무튼 부지런히 공부해 봅시다.^^
이번 강좌에서는 Image와 관련된 엘리먼트와 기능에 대해 간단하게 배워볼까 합니다. 실버라이트에서 Image 엘리먼트는 비트맵 이미지를 보여주는데 사용됩니다. 다시 말해 Image 엘리먼트는 실버라이트에서 JPG 그리고 PNG 이미지를 보여주기 위한 방법을 제공하며, 이미지를 보여 주기 위해서 Image 엘리먼트에 간단하게 Source 속성을 설정하기만 하면 됩니다.

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


이미지를 다른 크기로 보여주길 원할 때 Stretch 속성에 적절한 값을 설정하면 되는데 그 값은 None, Fill, Uniform, UniformToFill 입니다. 아래의 코드를 통해 각각 어떤 모양으로 렌더링 되는지 확인해보면 명확히 알 수 있습니다.
사용자 삽입 이미지
                                            (이미지 출처 :
http://www.silverlight.net)

Posted by -세티-