본문 바로가기

IT 살이/04. 기술 - 프로그래밍

10 Frame

이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다.

Frame
은 다른 스타일의 네비게이터(독립형 또는 브라우저 기반, 메뉴 기반 또는 하이퍼링크 기반) 가 호스팅하는 컨텐트에 브라우저 스타일의 사용자 경험을 포함시킬 수 있다. 그것의 유연성을 고려해서 개발자는 Frame을 사용하는 방법을 결정할때는 의도된 사용자 경험에 맞도록 잘 결정해야 한다.

독립형, 메뉴 기반의 애플리케이션은 도움말 파일 같은 문서 스타일의 컨텐트로 네비게이팅하는 적절한 모델이 되지 못한다. 대신에 그림 10처럼 하이퍼링크 방식이 좀더 적절할 것이고 쉽게 독립형 애플리케이션의 윈도우(Window)에 임베딩될 수 있을 것이다.

1037187849
그림 10 독립형 윈도우에서의 브라우징 가능한 컨텐트

이것은 다음과 같은 마크업으로 가능하다.

<!--HelpDialog.xaml (markup)-->

     <Window ...="" >

       <DockPanel>

         <TextBlock

           Padding="20,20,20,20"

           DockPanel.Dock="Top"

           TextWrapping="Wrap"

           FontSize="15"

           FontWeight="Bold" >

           Box Application Help

         </TextBlock>

         <Frame Padding="20,0,20,0"           Source="HelpPageContents.xaml" />

       </DockPanel>

     </Window>

Frame을 사용하는 다른 방법으로는 그림 11처럼, WPF 페이지(Page)의 컨텐트내에 호스팅시킴으로써 HTML IFrame처럼 사용할 수 있다. 마크업 코드는 다음과 같을 것이다.

<!--HelpPage.xaml (markup)-->

     <Page ...="" >

       <DockPanel>

         <TextBlock

           Padding="20,20,20,20"

           DockPanel.Dock="Top"

           TextWrapping="Wrap"

           FontSize="15"

           FontWeight="Bold" >

           Box Application Help

         </TextBlock>

         <Frame ...="" Source="HelpPageContents.xaml" />

       </DockPanel>

     </Page>

다른 네비게이터에 직간접으로 호스팅되는 컨텐트에 프레임이 호스팅될때는 기본적으로 부모 네비게이터가 관리하는 네비게이션 서비스를 사용한다. 이것이 의미하는 바는 프레임의 네비게이션 히스토리는 부모 네비게이터 자신의 히스토리와 함께 부모 네비게이터의 네비게이션 저장 히스토리로 저장된다는 것이다. 따라서 부모 네비게이터의 네비게이션 히스토리를 앞 뒤로 이동하기위해서는 반드시 프레임의 네비게이션 히스토리를 이동해야만 한다. 만약 부모 네비게이터가 몇 개의 페이지에서 공유되는 컨텐트를 호스팅하는 경우라면 이런 사실이 그리 나뿐 것만은 아니다. 이것은 ASP.NET master/child 컨텐트와 다소 비슷한 개념이다.

1053675072
그림 11 컨텐트 내에 호스팅된 Frame

반면에 하나의 프레임에서 여러 페이지들이 모여서 단일 논리적 컨텐트 집합을 구성한다면 그런 경우의 네비게이션은 다소 힘들어지게 될 것이다. 예를 들어 도움말을 구성하는 페이지가 여러 개 모여서 프레임에 호스팅되는 경우가 있을 수 있다. 사용자는 자신이 원하는 페이지를 찾아서 프레임 내부의 페이지를 네비게이트할 것이다. 그런 후 다시 부모 페이지로 네비게이트하려면 그동안 브라우징했던 모든 페이지를 다시 되돌아가야 한다. 그러나 사용자는 바로 이전의 부모 페이지로 네비게이트하기를 원할 것이다. 이런 경우 JournalOwnership 속성을 다음과 같이 설정해서 프레임의 히스토리는 프레임 자신이 사용하도록 할 수 있다.

<Page ...="" >

       ...

       <Frame ...="" JournalOwnership="OwnsJournal" />

       ...

     </Page>

JournalOwnership은 프레임이 어떤 저널(journal)을 사용할 것인지를 설정할 수 있는 속성이다. 저널(journal) WPF에서 네비게이션 히스토리를 내부적으로 캡슐화하는 유형이다. 저널 타입을 사용하면 프레임의 네비게이션 히스토리와 프레임의 부모의 네비게이션 히스토리를 함께 관리할 것인지 분리해서 관리할 것인지를 설정할 수 있는 것이다. 다음 JournalOwnership 열거형 값중의 하나가 된다. 

enum JournalOwnership

{

  Automatic,        // Frame이나 NavigationWindow 호스팅을 하면 "UsesParentJournal"

                    // 그렇지 않다면 “OwnsJournal”

                   // (default)

  OwnsJournal,      // Frame 네비게이션 히스토리를 관리한다.

  UsesParentJournal // Frame 호스트가 네비게이션 히스토리를 관리한다.

}

프레임이 자신만의 네비게이션 히스토리를 갖는다면 그림 12처럼 부모의 네비게이션과 비주얼적으로도 구분할 수 있도록 해준다.

1026805729
그림 12 자신의 네비게이션 히스토리를 갖는 프레임

'IT 살이 > 04. 기술 - 프로그래밍' 카테고리의 다른 글

11 WPF 리소스  (0) 2009.04.23
09 XAML Browser Applications  (0) 2009.04.23
08 NavigationService  (0) 2009.04.23