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

카테고리

Happydong (1363)
프로그래밍 (156)
01.C#기초 (4)
02.C#고급 (13)
03.ASP.NET (28)
04.HTML&Script (17)
05.Silverlight (38)
06.C 언어 기초 (2)
07.iOS (14)
08.Java (5)
09.SQL (8)
10.컴퓨터보안 (10)
11.패턴이야기 (3)
12.유니티3D (1)
13.Ubuntu (7)
14.Node.js (6)
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)



Behavior

 

 Behavior는 위에서 설명한 바와 같이 객체에 행동을 붙어 주는 녀석입니다. Behavior에는 MouseDragElementBehaviorFluideBahavior가 포함되어 있습니다. 그럼 간단하게 쉽게 많이들 사용할 수 있는 MouseDragElementBehavior에 관해서 알아 보도록 하겠습니다.

 

-       MouseDragElementBehavior

MouseDragElementBehavior는 내가 원하는 객체에 붙어주기만 하면 드래그가 되는 것을 뜻합니다 .그럼 간단한 예제를 통해서 어떻게 사용하는지 알아보도록 하겠습니다.

예제 소스는 HyperlinkAction때 사용했던 이미지를 그대로 사용하도록 하고, 이 이미지 컨트롤에 MouseDragElementBehavior를 붙어서 이미지를 움직여 보도록 하겠습니다. XAML파일에 이미지컨트롤을 올려두고, 예전 예제들같이 Assets  >>  Behaviors >> MouseDragElementBehavior를 선택 한 후 드래그를 해서 이미지컨트롤에 붙어 두도록 합니다.

 

[그림4-1]

 

 예전 예제들과 비슷한 부분이 많아서 이젠 지루하면서도 능숙하게 잘하실 것이라 생각이 드는군요, 그럼 바로 이제는 속성 창에서 속성 내용을 지정하도록 하겠습니다.

 

[그림4-2]

 그림4-2를 보시는 거와 같이 MouseDragElementBehavior 속성이 별로 없는 것을 확인 할 수가 있는데요, 이렇게 노출된 속성도 안 아주 간단합니다.

 

-       Common Properties 속성 관련
 . ConstrainTopParentBounds :
이는 드래그 당하는 객체가 부모 컨트롤 밖으로 나갈 수 있는지 여부를 설정합니다. (체크되면 부모의 창에서 벗어 날수가 없게 됩니다.)
 . X :
현재 컨트롤의 X 좌표입니다
.
 . Y :
현재 컨트롤의 Y 좌표입니다.

 

간단하게 설정이 끝났습니다. 너무 쉽지요!! 마우스로 그냥 클릭클릭 몇 번으로 이렇게 드래그가 되다니! 정말 놀랍지 않습니까?? 예전 같았으면은 이벤트를 몇 개를 만들어서 Point로 객체의 위치 찾고 , 계산하고 등등에 아주 번거로운 일들을 했어야 했습니다. 그러나 Silverlight 3에서 기본적으로 MouseDragElementBehavior로 제공해 주니 재사용 성도 좋고, 어떤 객체든간에 쉽게 붙 일수 있으니 정말 편한 것 같습니다. 그럼 위 작성한 내용을 가지고 컴파일 후 실행을 해보도록 하겠습니다.

 

[그림4-3]

 

 그림4-3은 실행 모습을 보여주고 있으면, 1번 실행화면은 ConstraninTopParentBounds를 체크하지 않은 모습이고, 2번 실행화면은 체크한 모습입니다. 2번의 경우 부모 Grid에서 구역을 벗어나지 못하고 있는 것을 확인 하실 수 있을 겁니다.

 

-       FluideBahavior

FluideBahavior는 컨트롤의 위치가 변경될 때 애니메이션을 통해 부드럽게 움직이도록 도와주는 Behavior입니다. , 레이아웃이 변경되었을 때 컨트롤이 자연스럽게 위치를 다시 잡을 수 있도록 하는 애니메이션을 지정해 주는 것 입니다. 이 예제는 따로 없습니다. Behavior 예제와 비슷하므로 따러 예제코드를 만들지 않았습니다.

 

 

지금까지 Behaviors에 관해서 알아 보았는데요, 정말 쉽지 않습니까!! Silverlight 2에 비해서 Silverlight 3은 비헤이비어를 통해서 코드비하인드에서 작성해야 할 코드가 많이 줄어 들었습니다. 또한 비헤이비어는 요즘 각광 받고 있는 MVVM패턴에도 아주 잘 어울리며, 비헤이비어를 여러 가지 내용으로 만들어서 사용할 수도 있습니다. Silverlight 3에서 정말 편한고 필요했던 내용들이 많이 적용이 되었습니다. 비헤이비어는 그 중 제일 유용한 내용이라고 생각하며, 실무에서도 활용도가 제일 높을 것이라고 필자는 확신합니다.

Demo.zip


※ 예제 파일을 첨부해 놓습니다!!

Posted by happydong
, |




이 내용은 월간 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
, |