Tech/Silverlight2009. 10. 12. 15:59

자, 이제 Element Binding 사용법에 대해서 알아봅시다!

Element Binding은 FrameworkElement객체의 속성끼리 Binding을 시키는 방법인데요.
Binding하는 개체가 FrameworkElement여야 한다는 것이 제약점입니다.

우선 Blend 3에서 아주 간편하게 Element Binding을 하는 방법을 알아보겠습니다.



위와 같이 Background Image라는 타이틀을 갖고 각종 이미지들을 담고 있는 ListBox를 만들었습니다.

이 ListBox를 이용하여 수행하도록 만들고 싶은 동작은 ListBox에 있는 Item을 선택할 때, 선택된 Item에 따라 배경 이미지가 바뀌는 것입니다.



ListBox의 Properties로 가서 Source에 우측 조그만 사각형 박스를 클릭하여 Data Binding을 클릭하면,
(Data Binding이 되어 있으면 노란색으로 표시가 됩니다)



1. Data Field, Element Property, Explicit Data Context중에서 Element Property로 들어갑니다.
2. 제가 원하는 건 이미지 정보를 담고 있는 ListBox와 연결을 시키는 것이기 때문에 scene elements에서 "imgList"를 선택합니다.
3. scene elements에서 선택한 개체와 관련된 상세한 속성들이 우측 Properties목록에 좌르르륵~ 나오게 되는데요, 이중에 원하는 정보가 있으면 그대로 연결하면 됩니다. 하지만 제가 원하는 속성은 이 곳에 명시되어 있지 않습니다. 제가 원하는 속성은 ListBox에서 선택된 Item의 이미지 정보니까요.
4. Use a custom path expression을 체크하고, SelectedItem.Children[1].Source라고 적어준 후에 Binding direction을 'TwoWay'로 설정해 줍니다.

이제 OK버튼만 누르면 끝!

이렇게 만들어진 Element Binding은 xaml상에서 어떻게 쓰여져 있을까요?

Source="{Binding SelectedItem.Children[1].Source, ElementName=imgList, Mode=TwoWay, UpdateSourceTrigger=Explicit}"

Binding된 속성, FrameworkElement 객체, Binding Mode 등의 정보들이 그대로 설정한 것과 똑같이 쓰여져 있습니다.



1번 이미지를 클릭한 것이 보이시죠?  ^ㅁ^)/

참 쉽죠잉~ ' ㅍ')~

'Tech > Silverlight' 카테고리의 다른 글

Silverlight Pixel Shader 개발 팁  (0) 2009.10.28
[Element Binding]  (0) 2009.10.12
[SketchFlow를 만들자 2]  (0) 2009.10.09
[Blend에서 Behvaior 사용해보기]  (0) 2009.10.09
Posted by 알 수 없는 사용자
Tech/Silverlight2009. 10. 9. 16:59

 
직접 SketchFlow를 만들어 보았습니다.
ImageSlidePlayer라는 프로그램을 프로토타이핑하기 위해 만들었는데요, 실제 ImageSlidePlayer라는 프로그램은 이미 만들어 두었고, SketchFlow는 실제 체험해 보기 위해 만들었습니다.

SketchFlow는 왜 사용하는가 ?
  - 실제 만들어질 프로그램의 UI와 기능과 흡사하게 만들 수 있다.
  - 실제 구현에 들어가기 전에 발표를 하고 시연을 하여 피드백을 판서로 기록하여 요구사항에 가깝게 SketchFlow를 수정할수록 요구사항들을 충족시키는 프로그램을 만들 수 있게 된다.
  - 구현할 프로그램의 기능들과 흡사하게 만들기 때문에 시연을 함으로써 각 기능들에 대한 이해와 필요성을 상대방에게 알리기 용이하다.
  - 실제 프로그램에 쓰일 각종 Control들과 Panel의 이름과 위치를 정하기 때문에 프로그램 구현에 들어가게 되면 디자이너와 개발자들은 SketchFlow 프로젝트에 쓰인 이름과 배치에 쓰인 정보들을 이용하면 된다.
  - Blend 3와 똑같이 사용할 수 있다.
  - MS Word문서로 내보내기 기능이 있어서 쉽게 보고서 형태로 작성할 수 있다.
  - 포토샵과 일러스트레이터의 프로젝트 파일과 연동이 된다.

ImageSlidePlayer?
  - Image를 큐브 모양으로 만들어서 회전 시키며 보여주는 Player입니다.

ImageSlidePlayer의 SketchFlow Map을 보면 보여질 화면이 두 개 뿐이라서 Screen이 두 개입니다. 참 썰렁하죠;



<SketchFlow Map>



<ImageSlidePlayer & ImageViewerOption>


ImageSlidePlayer에는 이미지들을 회전시키며 보여주는 ImageSlideViewer와 ImageSlideViewer의 size와 ImageViewerOption 의 배경 이미지와 색을 설정할 수 있는 ImageViewerOption이 있습니다.
SketchFlow에서는 종속되어있는 Screen의 Children에 대한 정보를 얻을 수가 없어 굉장히 많이 어려웠습니다.
(아예 안되는 것은 아니지만, 소스 코드를 만져야 하는 일이기 때문에 SketchFlow 내에서 수행 가능한 한도로 작업을 변경했습니다.)

ImageSlidePlayer SketchFlow의 동작구조

1. ImageSlidePlayer
  - 윗쪽 버튼 : [NavigateToScreen] Behavior를 이용하여 ImageViewerOption screen으로 이동
* [NavigateToScreen] Behavior란 ? 다른 Screen으로 이동 시켜준다.

  - 아랫쪽 버튼 : [ChangeRotation] Behavior를 이용하여 Player가 위로 뒤집히면서 ImageViewerOption이 등장
  - 왼쪽 버튼 : [ChangeRotation] Behavior를 이용하여 ImageViewer의 이미지들이 왼쪽으로 90도씩 회전
  - 오른쪽 버튼 : [ChangeRotation] Behavior를 이용하여 ImageViewer의 이미지들이 오른쪽으로 -90도씩 회전

2. ImageViewerOption
  - Ok 버튼 : Width, Height를 입력하고 Ok버튼을 누르면 ImageSlideViewer의 size가 변경되며, [NavigateToScreen] Behavior를 이용하여 ImageSlidePlayer screen으로 이동
* Blend 상에서 Player로의 접근의 불가하여 실제 변경은 불가하다.

  - Background Image 리스트 박스 : Element Binding을 통해 Item을 선택하면 해당 Item의 이미지가 ImageViewerOption와 ImageSlidePlayer의 배경 이미지로 변경
* Blend 상에서 Player로의 접근의 불가하여 실제 변경은 불가하다.
* Background Image 리스트 박스의 내용을 Sample Data  Source를 생성하여 채우려고 했지만, Sample Data Source의 내용에 접근하여 Element Binding을 할 수 있는 방법이 없어서 포기하고 Item들을 직접 StackPanel로 만들어서 채웠다.

  - Color 콤보 박스 : Element Binding을 통해 Item을 선택하면 해당 Item의 배경 색이 ImageViewerOption와 ImageSlidePlayer의 배경 색으로 변경
* Blend 상에서 Player로의 접근의 불가하여 실제 변경은 불가하다.

  - 아랫쪽 버튼 : [NavigateToScreen] Behavior를 이용하여 ImageSlidePlayer screen으로 이동

SketchFlow의 단점 ?
  - 사용자가 SketchFlow를 사용할 수 있는 수준이어야 한다.
* 적어도 각종 Control에 대한 지식이 있어야 하며, Blend 3 사용 경험자일 수록 쉽다.
  - SketchFlow Project를 그대로 실제 프로젝트에 대입하거나 재활용할 수 없다.
* SketchFlow에서 쓰이는 클래스의 type은 Screen이며, 이 type은 SketchFlow 전용이다.
  - 구현할 프로그램의 모든 기능을 SketchFlow내에서만 실현시키기엔 어느 정도의 한계가 있다.


SketchFlow에서 부딪히는 문제들 때문에 삽질을 많이했던 것 같은데요, 중간중간 MVVM/Command Pattern, Behavior, Element Binding 등도 같이 접하면서 공부할 수 있는 기회들이 있어서 좋았습니다.
아직 SketchFlow에서 state와 SketchFlowAnimation을 이용하는 방법을 알지 못해서 좀 아쉽습니다.

아직 공부하지 못한 것은 픽셀 셰이더 이펙트입니다.

이상 박경민이었습니다! -ㅁ-)/



참고하면 좋은 사이트 -
http://www.uxfactory.com/752
[Expression Blend 3] 스케치 플로우(SketchFlow), 어떻게 사용할까? - 1
[Expression Blend 3] 스케치 플로우(SketchFlow), 어떻게 사용할까? - 2
[Expression Blend 3] 스케치 플로우(SketchFlow), 어떻게 사용할까? - 3


'Tech > Silverlight' 카테고리의 다른 글

[Element Binding]  (0) 2009.10.12
[Blend 3 Element Binding]  (0) 2009.10.12
[Blend에서 Behvaior 사용해보기]  (0) 2009.10.09
[Sketch Flow를 만들자]  (0) 2009.10.06
Posted by 알 수 없는 사용자