블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday




이 내용은 월간 Web에 2010년 01월호에 기고했던 내용 입니다!!

[바로가기]
실전활용!! - Behavior를 사용하자 (1)
실전활용!! - Behavior를 사용하자 (2)
실전활용!! - Behavior를 사용하자 (3)



TriggerAction

 

 TargetedTriggerAction‘TargetName’을 이용해 액션 대상을 지정해, 다른 컨트롤(액션을 발생 할 컨트롤)에서 제어 할 수 있었습니다. 반면, TriggerAction은 액션 대상을 자기 자신으로 설정하도록 합니다. TargetedTriggerAction에는 ControlStoryboardAction,

HyperlinkAction, PlaySoundAction 3가지가 포함 되는데요, 이 또한 블랜드로 작업하시면 쉽게 사용하실 수 있습니다.

 

-       ControlStoryboardAction

 ControlStoryboardAction은 스토리보드를 만들어서 쉽게 실행 시킬 수 있도록 도와줍니다. 예를 들어 보자면 이미지 컨트롤이 위치가 이동되는 애니메이션이 있다고 가정했을 때 이를 실행하기 위해서는 XAML파일의 코드비하인드에서 [StoryboardNaem].Begin()이라고 Begin함수를 불러 주었을 것입니다. ControlStoryboardAction을 이용하면 역시 코드비하인드에서 코드를 쓸일이 줄어 듭니다. 특히 프로그래밍 언어를 모르는 디자이너들도 자신이 만든 스토리보드를 ControlStoryboardAction을 이용해 쉽게 실행해 볼수 있습니다. 그럼 아래 예제를 보면서 알아보도록 하겠습니다.

 

 

<!-- Storyboard1 : 회전하면서 이동하는 Animation -->

<Storyboard x:Name="Storyboard1">

                       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="image" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">

                              <EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="540">

                                      <EasingDoubleKeyFrame.EasingFunction>

                                             <CircleEase EasingMode="EaseOut"/>

                                      </EasingDoubleKeyFrame.EasingFunction>

                              </EasingDoubleKeyFrame>

                       </DoubleAnimationUsingKeyFrames>

                       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="image" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">

                              <EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="450">

                                      <EasingDoubleKeyFrame.EasingFunction>

                                             <CircleEase EasingMode="EaseOut"/>

                                      </EasingDoubleKeyFrame.EasingFunction>

                              </EasingDoubleKeyFrame>

                       </DoubleAnimationUsingKeyFrames>

</Storyboard>

<!-- 중간 생략... -->

 

<!-- Target Image Control-->

<Image x:Name="image" Source="/Demo;Component/Resource/Image01.JPG" Height="456" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">

                              <Image.Projection>

                                      <PlaneProjection/>

                              </Image.Projection>

                              <Image.RenderTransform>

                                      <TransformGroup>

                                             <ScaleTransform/>

                                             <SkewTransform/>

                                             <RotateTransform/>

                                             <TranslateTransform/>

                                      </TransformGroup>

                              </Image.RenderTransform>

</Image>

[코드 2-1] XAML파일 코드

 

 위 코드는 간단한 스토리보드를 만들 코드입니다. 간략하게 설명하자면 이미지 컨트롤을 오른쪽으로 이동하면서 도는 애니메이션입니다. 이를 실행하기 위해서 버튼 컨트롤을 생성하도록 합니다. 그리고 블랜드에서 ControlStoryboardAction을 드래그해서 버튼 컨트롤에 붙어 주도록합니다.

( ChangePropertyAction 예제 참고.)

 [그림2-1]

 버튼 컨트롤에 ControlStoryboardAction을 붙이고, [그림 2-1]화면에서 속성을 설정 하도록합니다. Trigger 관련 속성 설정은 위에서 설명한 ChangePropertyAction과 동일하며, Common Properties 관련 속성은 아래와 같습니다.

 

-       Common Properties 관련 속성
. ControlStoryboardOption :
스토리보드를 재생,정지,일시 정지 등의 옵션을 선택합니다.
. Storyboard :
실행 시킬 스토리보드를 선택합니다.

 

속성을 모두 설정했다면 컴파일 후 실행해 보면 아래 그림과 같이 잘 움직이는 걸 보실 수 있을 겁니다.

[그림2-2]

 

-       HyperlinkAction

 HyperlinkAction HTML A태그와 비슷하다고 생각하시면 됩니다. 기존에는 버튼 클릭 같은

이벤트를 받아서 코드비하인드에서 아래와 같은 코드를 짜서 페이지를 이동했을 것입니다.

 

HtmlPage.Window.Navigate(new Uri("http://www.naver.com", UriKind.RelativeOrAbsolute));

[코드 3-1]

 

그러나 이제는 HyperlinkAction을 이용하면 코드비하인드에 위와 같은 코드를 번거롭게 짜실 필요가 없어 집니다. 간단한 예제를 만들어 보도록 하겠습니다. 예제 내용은 이미지 컨트롤을 클릭하면 네이버(http://www.naver.com)로 이동하도록 하는 예제입니다.

 

<!-- 중간 생략... -->

<Image Source="/Demo;Component/Resource/Image01.JPG" Height="456" Cursor="Hand"></Image>

<!-- 중간 생략... -->

[코드 3-2]

 

XAML파일에 이미지컨트롤을 하나 올려 놨습니다. 이제 이미지컨트롤을 클릭했을 경우 네이버 사이트로 이동하도록 HyperlinkAction을 걸어 보도록 하겠습니다. 위에서 했던 예제들과 같이

Assets >> Behaviors >> HyperlinkAction을 선택해서 이미지컨트롤에 드래그에서 붙이도록 합니다.(그림3-1 참고)

 

[그림3-1]

 

그림3-1과 같이 이미지컨트롤에 HyperlinkAction을 붙어 넣었다면, 속성 창에서 링크로 연결할 주소를 입력해주도록 합니다.

[그림3-2]

 

Trigger 관련 속성 설정의 위의 예제들을 참고하시면 되고, Common Properties는 아래와 같습니다.

 

-       Common Properties 관련 속성
. NavigateUri :
링크로 연결할 Uri를 입력합니다.
. TargetWindow :
새롭게 이동하는 페이지를 새 창에서 띄울 것인지(_blank), 현재 윈도우를 이동할 것인지(_self)등을 지정합니다.

 

그림3-2와 같이 속성 내용을 다 지정하고 실행시켜 보면 그림3-3과 같이 잘 실행되는 것을 확인 하실 수 있을 것 입니다.

[그림3-3]

Posted by happydong
, |



 
이 내용은 월간 Web에 2010년 01월호에 기고했던 내용 입니다!!

[바로가기]
실전활용!! - Behavior를 사용하자 (1)
실전활용!! - Behavior를 사용하자 (2)
실전활용!! - Behavior를 사용하자 (3)



Silverlight 3에서 가장 실무에서 활용 성이 좋고, 또한 개발에 편리함을 주는 비헤이비어(Behavior)라는 녀석을 알아 보고, 예제를 통해서 어떻게 사용하지는 살펴보도록 하겠습니다.

 

 비헤이비어을 살펴보기 앞서 사전적 의미를 찾아보면, 행동, 거동, 행실 등으로 나타나는데요, 즉 비헤이비어는 행동의 개념이라는 것을 예상 할 수 있을 겁니다. 간단히 예를 들어 설명하자면, 남자들이 군대에 가면 자신이 군생활 동안 맡아야 할 보직이란 걸 정해 주는데요, 그렇게 보직이 정해지면 군생활 마치는 그날까지 그 일(행동)을 해야 하는 것 입니다. 이 비유를 풀어 보자면, 남자들은 객체들을 의미하고요, 보직은 비헤이비어라고 생각하시면 될 것 같아요. , 객체에 비헤이비어를 붙어 주면 그 객체는 정해진 행동을 취하는 것이지요. 적절한 비유가 되었는지 모르겠습니다만, 대충 객체에 비헤이비어를 붙어서 쉽게 행동을 정의 할 수 있다는 것만 이해하고, 밑에서 나올 예제들을 통해서 좀더 자세히 알아보도록 하겠습니다.

 

비헤이비어 예제를 살펴보기 앞서 비헤이비어는 크게 3종류로 나눌 수 있는데요, 이는 아래와 같습니다.

-       TargetedTriggerAction

-       TriggerAtion

-       Behavior

 

3종류를 통틀어 Behaviors라고 합니다. 그럼 예제 소스를 통해서 어떻게 사용하면 좋은지 알아 보도록 하겠습니다.

 

TargetedTriggerAction

 

 TargetedTriggerAction은 액션(Action)을 적용할 대상을 설정할 수 있도록 되어 있습니다. 액션을 적용할 대상을 가리키기 위해서 ‘TargetName’ 프로퍼티(Property)를 가지고 있으며, 이 프로퍼티에 대상 컨트롤의 이름을 명시하면 됩니다. TargetedTriggerAction에는 ChangePropertyAction, GoToStateAction,  RemoveElementAction 3가지 액션이 포함 되어 있습니다. 3가지 액션 중에서 자주 사용 할 수 있는 ChangePropertyAction에 대해서 알아 보도록 하겠습니다.

 

-       ChangePropertyAction

 ChangePropertyAction Target 컨트롤의 속성 값을 변경하기 위해 사용됩니다. , 내가 변경하고자 하는 객체의 속성을 버튼클릭 이벤트나 어느 특정 이벤트가 발생했을 때 변경해주고 싶다라고 한다면 ChangePropertyAction을 사용하면 좋을 것 같습니다. 예를 들어 상황을 가정해 볼게요.

 이미지(Image)컨트롤이 하나 있고, 버튼(Button)컨트롤이 2개 있습니다. 첫 번째 버튼은 클릭하면 이미지를 안보여 주고, 두 번째 버튼을 클릭하면 이미지를 보이게 해 주고 싶다

위 내용과 같이 만들기 위해서는 보통은 버튼 클릭 이벤트를 XAML페이지의 CS파일에서 열심히 이벤트를 정의해서 작성하실 겁니다. 아래 코드와 같이 말이지요.

 

<StackPanel>

<!-- Target Image Control-->

<Image x:Name="image" Source="/Demo;Component/Resource/Image01.JPG" Height="300"/>

<!-- Button 모음 -->

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">

        <Button Content="안보이게"  x:Name="Button01" Click="Button01_Click" ></Button>

<Button Content="보이게" x:Name="Button02" Click="Button02_Click" ></Button>

</StackPanel>

</StackPanel>

[코드 1-1] XAML 파일 내용

 

private void Button01_Click(object sender, RoutedEventArgs e)

{

     image.Opacity = 0;

}

 

private void Button02_Click(object sender, RoutedEventArgs e)

{

     image.Opacity = 1;

}

[코드 1-2] 코드비하인드(CodeBehind)

 

  XAML 파일은 버튼에 이벤트를 걸어주고, 코드 비하인드에서는 해당 이벤트에 이미지 컨트롤이 어떻게 보여줘야 하는지 정의해 놨습니다. 아주 간단한 코드 입니다만, 이를 ChangePropertyAction을 이용하면 더 쉽게 구현 할 있습니다. 그럼 ChangePropertyAction을 이용해서 똑 같이 만들어 보도록 하겠습니다. 이는 블랜드로 작업하는 게 아주 편하니, 블랜드를 이용해서 만들어 보도록 하지요.

[그림1-1]

 

 그림1-1은 블랜드에서 대충 디자인한 모습을 보여주고 있습니다. 그럼 이제 Behaviors 메뉴에서 ChangePropertyAction을 찾아 설정해 보도록 하겠습니다.

 

[그림1-2]

 

 그림1-2는 블랜드 왼쪽 상위부분 탭 메뉴를 보여줍니다. 탭 메뉴에 보시면 Assets라는 메뉴가 있는데요, 이를 선택하고 아래 보시면 Behaviors라는 메뉴가 있을 것 입니다. 이를 선택하면 ChangePropertyAction이라고 바로 보이실 겁니다. 그럼 ChangePropertyAction을 드래그해서 버튼 컨트롤에 붙이도록 합니다. (그림1-3 참고)

 

[그림1-3]

 버튼 2개 모두 붙어 넣었다면 이제 속성을 설정해 보도록 하겠습니다. 버튼에 붙어 넣은 ChangePropertyAction을 선택하고, 오른쪽에 있는 속성 창에서 설정을 하도록 하겠습니다.

 

[그림1-4]

 

속성 창(그림1-4 참고)을 보면 Trigger, Common Properties, Animation Properties 3종류의 속성이 보일 겁니다. 간단하게 설명하자면 아래와 같습니다.

 

-       Trigger 관련 속성

. TriggerType : TriggerType은 액션(Action)이 일어나기 위한 특정 조건의 타입을 지정한다고 생각하시면 될 것 같습니다. , 지금 버튼 컨트롤에 ChangePropertyAction이 붙어 있으니깐, 버튼 컨트롤에서의 조건 타입을 말하는 것이겠지요, 그래서 저는 EventTrigger을 선택했습니다. (New 버튼을 클릭해서 선택 함.)

 

. SourecName : 액션을 발생 시킬 컨트롤을 선택합니다. 이는 이미 버튼컨트롤에 붙어 놨기때문에 따로 지정하지 않으셔도 됩니다.

. EventName : 버튼 컨트롤에서 어떤 일이 일어났을 때 액션을 줄 것인지 이벤트를 선택합니다. 저는 버튼컨트롤의 기본 이벤트인 Click을 설정했습니다.

 

-       Commom Properties 관련 속성
. TargetName : 액션을 발생 시킬 컨트롤의 이름을 지정합니다. 이름을 지정하는 텍스트박스 옆에 동그란 버튼이 있을 텐데요, 이를 이용해서 원하는 객체를 선택합니다.(클릭한 후 드래그해서 원하는 객체를 선택합니다.)
. PropertyName :
액션이 일어났을 때 변경 할 속성 이름을 지정합니다. 저는 버튼 클릭했을 때 Opacity 0(또는 1)으로 만들 것이기 때문에 Opacity속성으로 지정했습니다
.
. Value :
변경될 속성의 값을 지정 합니다
.

-       Animation Properties 관련 속성
. Ease : 컨트롤의 값이 변경될 때 사용할 애니메이션을 지정할 수 있습니다.
. Duration : Duration
Ease 프로퍼티가 설정된 경우에만 의미가 있는 프로퍼티로, 애니메이션의 재성 속도를 의미합니다.

 

위와 같이 설정을 하고 실행해 보시면, 앞 전에 코드로 작성했던 부분과 똑같이 동작하는 걸 보실 수 있을 겁니다. 또한 XAML의 코드 비하인드애서 코드를 작성하지 않아도 되니 깔끔한 코드가 나올 수 있습니다. 나머지 GoToStateAction,  RemoveElementAction은 간단히 설명하고 넘어 가도록 하겠습니다.

GoToStateAction은 객체의 State가 변경하고자 할 때 사용되는데요, 실버라이트로 개발을 해보셨던 분이라면 VisualStateManager.GoToState 라고 기억하실 겁니다. VisualStateGroup을 만들어서 코드비하인드에서 해당 이벤트가 들어오면 GoToState함수를 이용해 애니메이션을 실행시켰을 것입니다. GoToStateAction을 이용하면 또한 코드 비하인드에서 따로 코드를 작성해 줄 필요가 없습니다.

 RemoveElementAction은 객체를 삭제 하고자 할 때 사용됩니다. , 어떤 버튼을 클릭했을 경우 해당 객체가 삭제되도록 하고 자 할 때 사용하면 유용합니다.

 

  2가지 컨트롤 모두 ChangePropertyAction과 사용법이 비슷하니, 나중에 사용해 보시면 도움이 되실 겁니다.

Posted by happydong
, |



사용자 삽입 이미지
[ 포토라이트 시즌 2 모습 ]

"포토라이트 시즌 2"는 Silverlight 4에서 지원하는 웹캠플리커(Flickr) API를 이용해서 만든 실버라이트 애플리케이션입니다. 오늘 발표했던 PPT와 데모소스, 포토라이트 전체 소스를 올려 드리오니, 필요하신분들은 받아서 보시면 될 것 같습니다.

[실행모습보기]
(참고로, 개인적으로 집에서 돌고있는 서버에서 돌아가고 있어, 사정이 따라 연결이 안될수 있습니다.^^)
 
[다운로드]

p.s
 실행모습을 보기 위해서는 Silverlight 4 Beta developer runtime 이 설치 되어 있어야 하는데, 이는 아래 링크를 통해 다운받을 수 있습니다.

http://silverlight.net/getstarted/silverlight-4-beta/ 
(위 주소에서 Windows 또는 Mac 필요한 런타임을 받으면 됩니다.)

[윈도우 런타임 바로받기]


Posted by happydong
, |