통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
WPF & Silverlight 포럼마을입니다.
  마을등급 WPF & Silverlight   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 서학수 주민 728 since 2008-07-17
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
[마을 게시판]
WPF 강좌
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 WPF 강좌
 WPF -> XAML Exporter & Importer 만들기 2008-07-25 오전 6:37:36
 kdw234  kdw234님께 메시지 보내기kdw234님을 내 주소록에 추가합니다.kdw234님의 개인게시판 가기 번호: 37416  / 읽음:5,513

이번 시간에는 사용자가 작업중인 현재 WPF Application 에서 사용되는 객체를 XAML로 Export 및 Import를 수행하는 방법에 대한 내용을 소개합니다. WPF에서는 XAML에 제공된 런타임 개체의 Serialization에 사용할 수 있는 단일 정적 Save 및 Lode메서드를 제공합니다. 각각 System.Windows.Markup Namespace의 XamlWriter와 XamlReader라는 Class의 Static 메서드로 제공되고 있으며 Exporter 구현을 위한 XamlWriter에 대해서 알아보겠습니다.

XamlWriter는 제공된 개체를 XAML문자열을 반환하는 기능을 수행하는 Save란 메서드를 제공하며 Save메서드에 대한 Overload 목록은 아래와 같습니다.

  • Save(Object) - 제공된 개체와 해당 속성을 serialize하는 XAML(Extensible Application Markup Language) 문자열을 반환합니다.
  • Save(Object, Stream) - 제공된 개체와 해당 속성을 serialize하기 위해 XAML(Extensible Application Markup Language) 정보를 제공된 스트림에 저장합니다.
  • Save(Object, TextWriter) - XAML(Extensible Application Markup Language) 정보를 제공된 텍스트 작성기 개체의 소스로 저장합니다. 그런 다음 텍스트 작성기의 출력을 사용하여 제공된 개체와 해당 속성을 serialize할 수 있습니다.
  • Save(Object, XamlDesignerSerializationManager) - XAML(Extensible Application Markup Language) 정보를 사용자 지정 serializer에 저장합니다. 그런 다음 serializer의 출력을 사용하여 제공된 개체와 해당 개체의 속성을 serialize할 수 있습니다.
  • Save(Object, XmlWriter) - XAML(Extensible Application Markup Language) 정보를 제공된 XML 작성기 개체의 소스로 저장합니다. 그런 다음 XML 작성기의 출력을 사용하여 제공된 개체와 해당 속성을 serialize할 수 있습니다.

    ※ 원본 주소 : http://msdn.microsoft.com/ko-kr/library/system.windows.markup.xamlwriter.save.aspx

일반 적으로 Save(Object) 형식의 메서드를 사용하며 Object Parameter에 WPF객체를 전달하면 XAML로 Serialization된 문자열이 반환 됩니다.

아래 소스코드는 WPF Button객체를 XAML 문자열로 변환하는 간단한 Exporter를 구현한 C# 코드입니다.

// Create the Button.

Button TmpButton = new Button();

TmpButton.Height = 50;

TmpButton.Width = 100;

TmpButton.Background = Brushes.AliceBlue;

TmpButton.Content = "Click Me";


// Save the Button to a string.

string ButtonXAML = System.Windows.Markup.XamlWriter.Save(TmpButton);

만약 위와 같은 코드가 있다면 ButtonXAML이라는 변수에는 아래와 같은 결과가 저장되게 됩니다.

<Button Background="#FFF0F8FF" Width="100" Height="50" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">Click Me</Button>

그리고 만약 아래와 같이 해당 객체가 자식 객체를 소유 하고 있을 경우도 변환이 가능합니다.

// Create the Button.

Button TmpButton = new Button();

TmpButton.Height = 50;

TmpButton.Width = 100;

TmpButton.Background = Brushes.AliceBlue;

TmpButton.Content = "Click Me";


// Create the Canvs

Canvas TmpCanvas = new Canvas();

TmpCanvas.Children.Add(TmpButton);


// Save the Button to a string.

string ButtonXAML = System.Windows.Markup.XamlWriter.Save(TmpButton);

string CanvasXAML = System.Windows.Markup.XamlWriter.Save(TmpCanvas);

이와 같은 코드에서는 CanvasXAML에는 아래와 같은 Xaml코드가 생성됩니다.

<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">

<Button Background="#FFF0F8FF" Width="100" Height="50">Click Me</Button>

</Canvas>

반대로 XAML 문자열을 WPF객체로 변환하는 코드는 아래와 같습니다.

// using System.Windows.Markup;

// using System.Xml;

// using System.IO;


// Create the Button.

Button TmpButton = new Button();

TmpButton.Height = 50;

TmpButton.Width = 100;

TmpButton.Background = Brushes.AliceBlue;

TmpButton.Content = "Click Me";


// Save the Button to a string.

string ButtonXAML = System.Windows.Markup.XamlWriter.Save(TmpButton);


// Import XAML String

StringReader stringReader = new StringReader(ButtonXAML);

XmlReader xmlReader = XmlReader.Create(stringReader);

Button readerLoadButton = (Button)XamlReader.Load(xmlReader);


사용자 삽입 이미지
코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.