G.I.S Developer, 개발자 김형준(Dip2K)  
Front Page
Notice | Keyword | Tag | E-Mail | Guestbook | Admin | Write Article   
 
2007/06/28 02:23 2007/06/28 02:23
스타일 그리고 템플릿(Style, Template) - {3/3}

이제 우리가 진행해야할 것들은 ListBox에 그려진 이미지들의 정렬상태와 크기를 보기 좋게 하는 일과 사용자가 ListBox의 이미지를 선택하는 조작에서 효과를 넣는 일로써, 이 두가지 일을 하나 하나 해보도록 하겠다.

먼저 첫번째 것을 해결해보자. <Window.Resources> 태크안에 아래의 코드를 추가하자.

<Style TargetType="ListBox">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBox">
        <Border CornerRadius="6" 
                Background="{TemplateBinding ListBox.Background}">
          <ScrollViewer HorizontalScrollBarVisibility="Auto">
            <StackPanel Orientation="Horizontal"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center"
                        IsItemsHost="True"/>
          </ScrollViewer>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<Style TargetType="ListBoxItem">
  <Setter Property="MaxHeight"  Value="90" />
</Style>
두개의 스타일이 지정되어져 있다. 하나는 ListBox에 대한 스타일을 수정하고 있는데, 이미지 항목을 가로로 정렬하고 수평과 수직에 대해서 가운데 정렬을 지정하고 있다. 또한 ListBox의 모서리 부분을 반지름이 6으로 해서 둥그렇게 나타내도록 한다. 그리고 또 하나의 스타일은 ListBox의 항목의 높이 값을 90 픽셀로 지정하고 있어서, 이미지의 크기를 작게 나타내도록 한다. 이렇게 설정된 스타일에 어울리는 ListBox의 높이와 폭을 아래의 코드를 참고해서 기존의 <ListBox>의 코드를 수정하길 바란다.

<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
         Background="DarkGray" Width="630" Height="110"  
         Margin="10" SelectedIndex="0"/>
실행 결과는 아래와 같다.

자, 이제 남은 것은 사용자가 ListBox의 이미지 항목을 선택했을 경우, 그리고 마우스 커서가 이미지 항목에 놓일 때, 떠날 때에 어떤 효과를 줄것이다. 기본적으로 프로그램이 실행되면 모든 이미지 항목에 투명도를 0.4값을 지정해서 흐릿하게 보일 것이다. 이 상태에서 항목을 선택했을때는 선택된 이미지가 선명하게 되면서 커지게 된다. 또한 마우스 커서를 이미지 항목에 놓게 되면 서서히 이미지가 선명하게되고 마우스 커서가 이미지 항목을 떠나게 되면 항목은 다시 서서히 흐릿하게 보이도록 한다. 코드는 바로 앞에서 추가한 <Style TargetType="ListBoxItem"> ~ </Style>부분을 아래로 수정하면 된다. 기본적으로 어떤 이벤트가 발생시에 적절한 효과를 추가하는 것이므로 <Trigger> 태그를 사용하고 <DoubleAnimation>과 <StoryBoard>를 써서 정해진 시간에 맞는 에니메이션 기능을 추가했다. 스타일과 템플릿보다는 에니메이션 효과의 내용이 크므로 자세한 설명은 생략하고 코드만 보이도록 하겠다.

<Style TargetType="ListBoxItem">
  <Setter Property="MaxHeight"  Value="90" />
  <Setter Property="Opacity" Value="0.4" />
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Trigger.Setters>
        <Setter Property="Opacity" Value="1.0" />
        <Setter Property="MaxHeight" Value="100" />
      </Trigger.Setters>
    </Trigger>

    <EventTrigger RoutedEvent="Mouse.MouseEnter">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation
              Duration="0:0:1.2"
              Storyboard.TargetProperty="Opacity"
              To="1.0"  />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>

    <EventTrigger RoutedEvent="Mouse.MouseLeave">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation
              Duration="0:0:1.2"
              Storyboard.TargetProperty="Opacity" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
  </Style.Triggers>
</Style>
최종 실행 결과를 살펴보기에 앞서, 가장 처음 모습을 살짝 다시 보면..

이랬던 아이가 어느덧 커서.. 아래와 같은 美人으로 탄생했다. 스타일과 템플릿의 힘으로 말이다.


이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*

Tag :
Track this back : http://www.gisdeveloper.co.kr/trackback/247

[로그인][오픈아이디란?]
name    password    homepage
 hidden
BLOG main image
 Notice
[DuraMap-Xr] 소개 및 다운로드
[DuraMap-Xr] FAQ
개발과 관련한 질문은..
OpenGL Tutorials
운영자(Dip2K)에 대해
 Category
전체 (387)
GIS 개발 (82)
프로그래밍 (180)
스치는 생각들 (116)
번역 또는 집필 (3)
 TAGS
GIS OpenGL Shader Xr Algorithm Map Engine WPF ArcObjects ArcGIS C++
 Calendar
«   2010/07   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
 Recent Entries
XrGeocoder - 주소를 좌표... (1)
XrProjection, 좌표계 변... (19)
[Java] 파생 클래스가 아...
[Java] 정적 초기화 블럭(...
[DuraMap-Xr] 그리드 레이...
 Recent Comments
감사합니다!!! 이렇게 직...
김지훈 - 07/29
감사 감사~ 근데.. 이글은...
김형준 - 07/29
친절한 해석 감사드려요^^
안토니오 - 07/29
별말씀을요.. ^^ 댓글에...
김형준 - 07/28
최근에 XrGeocoder라는 툴...
김형준 - 07/28
네, 요즘은 바로 도움을...
김형준 - 07/28
이래 저러 경황이 없어 댓...
김형준 - 07/28
잘 봤습니다. 큰 도움이...
gekko - 07/27
혹시 주소를 좌표로 변환...
김지훈 - 07/25
감사드립니다.. 바빠서 몇...
임은섭 - 07/23
 Archive
2010/07
2010/06
2010/05
2010/04
2010/03
2010/02
2010/01
2009/12
2009/11
2009/10
2009/09
2009/08
 Link Site
Adobe Flex 3 Help
Cartograph 2.0
GIS 위키디피아
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OSGeo 한국 지부
Wikipedia
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
네이버 과학
대한측량협회
류광님의 블로그
비지니스 GIS
이민파님의 공간분석과 리...
 Visitor Statistics
Total : 659265
Today : 81
Yesterday : 451
태터툴즈 배너
rss