Introduction to XAML<br />Kim, Hyunyoung (young_kim@kaist.ac.kr)<br />Digital Media Lab.<br />2010-07-07<br />
Keywords<br />WPF<br />XML<br />XAML<br />Window 엘리먼트<br />프로퍼티<br />약간은 불필요한 시도<br />
19장 XAML<br />
XAML [zæ:mɛl]<br />WPF (Window Presentation Foundation)<br />인터페이스와 비즈니스 로직을 분명히 구분<br />응용 프로그램 서비스의 호스트를 통일: 인터페이스, 애니메이...
Stand Alone XAML<br />두 문서에 같은 엘리먼트 이름을서로 다른 목적으로 사용하는 경우<br />WPF 프로그래머의 XAML 문서 & 셔츠 버튼 제조업자의 XML 문서<br />	xmlns: XML 네...
페이지 속성 변경<br />예제 XamlPage.xaml<br />Page를 루트 엘리먼트로 생성하고 WindowTitle프로퍼티에 원하는 텍스트를 설정<br />StackPanel을 Page의 자식으로 생성<br />...
XamlReader.Load<br />XamlReader.Load메소드<br />System.Windows.Markup네임스페이스<br />XAML을 파싱해 초기화된 객체로 전환<br />XamlWriter.Save는 ...
XAML을 리소스로 사용하기<br />LoadXamlResource.xml<br />Button객체에 Name속성 포함<br />LoadXamlResource.cs<br />Stream 객체가 XamlReader.Loa...
Window가 루트인 Xaml<br />LoadXamlWindow.xml<br />LoadXamlWindow.cs<br />PresentationHost.exe는 XAML을 어떤 것의 자식으로 변환<br />여기서는 X...
XAML을 C#에서 로드하기<br />파일명은 XmlTextReader생성자로 바로 전달<br />객체가 Window이면 모달리스 대화상자처럼 보임<br />XmlTextReaderxmlreader = new XmlTe...
XAML<br />실제 애플리케이션에서는 XAML을 소스 코드와 함께 컴파일 하는 것이 보편적, 효율적<br />XAML 안에 이벤트 핸들러 이름을 직접 명시가능<br />지금까지 본 XAML<br />WPF의 클래스와...
Class속성<br />Class 속성<br />XAML 파일의 루트 엘리먼트<br />XAML이 프로젝트 일부로 컴파일될 때만 사용 가능<br />CompileXamlWindow.xaml<br />XAML 과 비하인드...
BAML (바멜)<br />XAML의 바이너리 형태<br />CompileXamlWindow.g.cs<br />XAML로부터 산출된 코드<br />Lstbox와 elips가 선언<br />InitializeCompone...
자신의 클래스를 XAML 내에서 사용<br />다른 네임스페이스 선언<br />반드시 소문자<br />http: 와 유사<br />사용하기 전에 선언<br />src (소스코드)가 자주 쓰임<br />UseCustomC...
XAML에서 사용자 정의 클래스 정의<br />CenteredButton.xaml<br />UseCustomXamlClass.xaml<br /><Button xmlns="http://schemas.microsoft.co...
Cont’d<br />UseCustomXamlClass.cs<br />public UseCustomXamlClass()<br />{<br />InitializeComponent();<br />for (inti = 0; ...
명확한 Main이 사라지는 현상<br />MyApplication.xaml<br />ApplicationDefinition으로 빌드 작업 설정<br />StartupUri는 Main 함수에서 호출되는 Run 메소드를 대...
코드가 없는 프로젝트<br />XAML 속에 데이터 바인딩을 가지고 있는 경우<br />XAML 애니메이션을 사용하는 경우<br />XamlOnlyApp.xaml<br />컴파일 시 클래스 자동 생성<br />XamlO...
XAML 파일 속에 C# 코드 넣기<br />앞의 CompileXamlOnly프로젝트와 유사<br />EmbeddedCodeWindow.xaml<br />필드 정의는 불가능<br />using등의 문제 해결 위해 Sys...
응용<br />리소스에 이미지 파일 추가<br />DesignXamlButtonWindow.xaml<br /><ButtonHorizontalAlignment="Center“ VerticalAlignment="Center...
20장 프로퍼티와 속성<br />
동적 XAML Reader<br />XamlCruncher프로젝트<br />XamlCruncherAssemblyInfo.cs<br />프로그램 정보<br />XamlCruncherSettings.cs<br />publi...
XamlCruncher.cs<br />XamlCruncher.cs<br />Window의 컨텐트가 될 Grid를 생성<br />Xaml이라는 최상위 메뉴와 하위 메뉴 생성<br />// DockPanel을 찾은 후 그것...
Cont’d<br />void Parse()<br />{<br />StringReaderstrreader = new StringReader(txtbox.Text);<br />XmlTextReaderxmlreader = ...
공백 개수 변경<br />XamlTabSpaceDialog.xaml<br />대화상자의 배치 정의<br />XamlTabSpaceDialog.cs<br />XamlCruncher.cs<br />Tab Space 메뉴 선...
TextBox와 Frame의 위치 변경<br />XamlOrientationMenuItem.cs<br />
Star.xaml<br />Points 프로퍼티<br />PointCollection타입<br />연속적인 X와 Y 좌표를 포인트로 명세<br />숫자는 공백이나 콤마로 구분 가능<br />Fill 프로퍼티<br />B...
LinearGradientBrush<br />적어도 2개의 값과 그라디언트스탑 필요<br />객체 엘리먼트(Polygon) & 프로퍼티 속성(Fill)<br />자식 엘리먼트를 포함하는 문법으로 프로퍼티 명세 가능 (프...
Cont’d<br /><Polygon xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.micros...
윈도우 컨텐트프로퍼티<br />DockPanel<br />Grid<br />StackPanel<br />
RoutedEvent<br />클래스와 이벤트 이름으로 속성으로 사용함으로써 이벤트 핸들러 설정 가능<br /><TextBlock.ContextMenu><br />	<ContextMenuMenuItem.Click="Me...
Thank you<br />Q&A<br />
Upcoming SlideShare
Loading in...5
×

Introduction To Xaml

1,656

Published on

Charles Petzold's WPF
Chapter 19-20

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,656
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduction To Xaml

  1. 1. Introduction to XAML<br />Kim, Hyunyoung (young_kim@kaist.ac.kr)<br />Digital Media Lab.<br />2010-07-07<br />
  2. 2. Keywords<br />WPF<br />XML<br />XAML<br />Window 엘리먼트<br />프로퍼티<br />약간은 불필요한 시도<br />
  3. 3. 19장 XAML<br />
  4. 4. XAML [zæ:mɛl]<br />WPF (Window Presentation Foundation)<br />인터페이스와 비즈니스 로직을 분명히 구분<br />응용 프로그램 서비스의 호스트를 통일: 인터페이스, 애니메이션, 3D, 오디오 등<br />XML (Extensible Markup Language)<br />XAML (Extensible Application Markup Language)<br />마이크로소프트에서 구조값과 객체를 초기화하는데 사용하기 위해 만든 선언형XML 기반 언어<br />WPF 의 사용자 인터페이스를 위한 언어<br />런타임 속성<br />편집 도구의 자유: 비주얼 스튜디오, 익스프레션블렌드, 메모장<br />의사소통: 개발자와 디자이너 간에 콘텐츠를 자유롭게 공유하고 편집 가능<br />C# 코드로 표현 가능<br />System.Windows.Controls<br /><Button Foreground=“Yellow” FontSize=“24pt”><br /> Hello, XAML!<br /></Button><br />Button btn = new Button();<br />btn.Foreground = Brushes.Yellow;<br />btn.FontSize = 32; // 장치 독립적 단위<br />btn.Content = “Hello, XAML!”<br />
  5. 5. Stand Alone XAML<br />두 문서에 같은 엘리먼트 이름을서로 다른 목적으로 사용하는 경우<br />WPF 프로그래머의 XAML 문서 & 셔츠 버튼 제조업자의 XML 문서<br /> xmlns: XML 네임스페이스 속성<br />엘리먼트와 자식 엘리먼트에게 적용<br />유일하고 영속적,URL을 사용하는 것이 일반적<br />예제XamlStackPanel.xaml<br />PresentationHost.exe<br />인터넷 익스플로러에 의해 호스팅될 수 있는 Page타입의 객체를 생성<br />로드된XAML을 실제 StackPanel, Button등객체로 변환한 후 이 객체를 Page의 컨텐트 프로퍼티에 저장<br /><Button Foreground=“Yellow” FontSize=“24pt”><br /> Hello, XAML!<br /></Button><br />http://schemas.microsoft.com/winfx/2006/xaml/presentation<br />
  6. 6. 페이지 속성 변경<br />예제 XamlPage.xaml<br />Page를 루트 엘리먼트로 생성하고 WindowTitle프로퍼티에 원하는 텍스트를 설정<br />StackPanel을 Page의 자식으로 생성<br />Window를 루트 엘리먼트로 한 스탠드얼론XAML은 불가능<br />PresentationHost.exe는 스탠드얼론 XAML 파일의 루트 엘리먼트를 어떤 것의 자식으로 만듦<br />Window객체는 그 어떤 것의 자식도 될 수 없음<br />루트 엘리먼트는Window를 제외하고 FrameworkElement를 상속받는 것이면 어떤 것도 가능<br />
  7. 7. XamlReader.Load<br />XamlReader.Load메소드<br />System.Windows.Markup네임스페이스<br />XAML을 파싱해 초기화된 객체로 전환<br />XamlWriter.Save는 객체로부터 XAML을 생성<br />Stream 객체나 XmlReader객체를 받음<br />string strXaml =<br />"<Button xmlns='http://schemas.microsoft.com/winfx/2006/" +<br />" xaml/presentation'" +<br />" Foreground='LightSeaGreen' FontSize='24pt'>" +<br />"Click me!" +<br />"</Button>";<br />StringReaderstrreader = new StringReader(strXaml);<br />XmlTextReaderxmlreader = new XmlTextReader(strreader);<br />object obj = XamlReader.Load(xmlreader);<br />
  8. 8. XAML을 리소스로 사용하기<br />LoadXamlResource.xml<br />Button객체에 Name속성 포함<br />LoadXamlResource.cs<br />Stream 객체가 XamlReader.Load의 인자가 되어 반환되는 객체(StackPanel)를 Window의Content프로퍼티에 할당<br />일단 객체가 XAML로부터 변환되어 창의 비주얼트리의 일부가 되면 FindName메소드를 사용해서 엘리먼트트리상에서 특정한 이름으로 찾는 것이 가능<br />실행 시에 로드한XAML에게 이벤트 핸들러를 연결할 수 있는 가장 간단한 방법<br /><Button Name="MyButton" HorizontalAlignment="Center" Margin="24"><br />Hello, XAML!<br /></Button><br />Uri uri = new Uri("pack://application:,,,/LoadXamlResource.xml");<br />Stream stream = Application.GetResourceStream(uri).Stream;<br />FrameworkElement el = XamlReader.Load(stream) as FrameworkElement;<br />Content = el;<br />Button btn = el.FindName("MyButton") as Button;<br />if (btn != null)<br />btn.Click += ButtonOnClick;<br />
  9. 9. Window가 루트인 Xaml<br />LoadXamlWindow.xml<br />LoadXamlWindow.cs<br />PresentationHost.exe는 XAML을 어떤 것의 자식으로 변환<br />여기서는 XAML 리소스가 Window임을 인식, Window를 상속받거나 Window자체를 직접 생성하지 않음<br />버튼 클릭 이벤트 핸들러를비주얼 트리 속에서 찾아 연결하지 않고 Window의 AddHandler를 호출해 연결<br />Main메소드는Application의 Run메소드에Window객체를 인자로 전달<br /><Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br /> Title="Load Xaml Window"<br />SizeToContent="WidthAndHeight"<br />ResizeMode="CanMinimize"><br />Uri uri = new Uri("pack://application:,,,/LoadXamlWindow.xml");<br />Stream stream = Application.GetResourceStream(uri).Stream;<br />Window win = XamlReader.Load(stream) as Window;<br />win.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick));<br />app.Run(win);<br />
  10. 10. XAML을 C#에서 로드하기<br />파일명은 XmlTextReader생성자로 바로 전달<br />객체가 Window이면 모달리스 대화상자처럼 보임<br />XmlTextReaderxmlreader = new XmlTextReader(dlg.FileName);<br />object obj = XamlReader.Load(xmlreader);<br />if (obj is Window)<br />{<br />Window win = obj as Window;<br />win.Owner = this;<br />win.Show();<br />}<br />Else<br />frame.Content = obj;<br />
  11. 11. XAML<br />실제 애플리케이션에서는 XAML을 소스 코드와 함께 컴파일 하는 것이 보편적, 효율적<br />XAML 안에 이벤트 핸들러 이름을 직접 명시가능<br />지금까지 본 XAML<br />WPF의 클래스와 프로퍼티만을 사용<br />그러나 XAML은 WPF만을 위한 마크업 언어는 아님 (예: Windows Workflow Foundation, WPF)<br />http://schemas.microsoft.com/winfx/2006/xaml: XAML 명세<br />WPF에서 사용<br />XAML 고유 엘리먼트와 속성을 위한 네임스페이스는 관례적으로 접두어x와 함께 선언<br />고유 엘리먼트와 속성이 많지 않아 WPF 관련 네임스페이스가 기본<br />xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation<br />xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml/presentation<br />
  12. 12. Class속성<br />Class 속성<br />XAML 파일의 루트 엘리먼트<br />XAML이 프로젝트 일부로 컴파일될 때만 사용 가능<br />CompileXamlWindow.xaml<br />XAML 과 비하인드 코드는 하나의 클래스<br />x:Class="MyNamespace.MyClasName"<br /><Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> x:Class="Petzold.CompileXamlWindow.CompileXamlWindow"><br />namespace Petzold.CompileXamlWindow<br />{<br />public partial class CompileXamlWindow : Window<br />{<br /> …<br />}<br />}<br />
  13. 13. BAML (바멜)<br />XAML의 바이너리 형태<br />CompileXamlWindow.g.cs<br />XAML로부터 산출된 코드<br />Lstbox와 elips가 선언<br />InitializeComponent()<br />XAML을 코드와 함께 컴파일했을 때만 가능<br />public CompileXamlWindow()<br />{<br />InitializeComponent(); // XAML 엘리먼트 속성 설정, 이벤트 핸들러 연결<br />…<br />}<br />void ButtonOnClick(object sender, RoutedEventArgsargs)<br />{<br />Button btn = sender as Button; // 생략가능<br />…<br />}<br />
  14. 14. 자신의 클래스를 XAML 내에서 사용<br />다른 네임스페이스 선언<br />반드시 소문자<br />http: 와 유사<br />사용하기 전에 선언<br />src (소스코드)가 자주 쓰임<br />UseCustomClass.xaml<br />UseCustomClass.cs<br />ColorGridBox가 상속받은 ListBox로 바꾸면 생략가능<br />데이터 바인딩을 정의하면 SelectionChanged이벤트 핸들러를 완전히 XAML 파일 속으로 넣을 수 있음 (23장)<br />xmlns:stuff=“clr-namespace:MyNamespace”<br /><stuff:MyControl …><br />using Petzold.SelectColorFromGrid;<br />…<br />void ColorGridBoxOnSelectionChanged(object sender, SelectionChangedEventArgsargs)<br />{<br />ColorGridBoxclrbox = args.Source as ColorGridBox;<br />…<br />}<br />
  15. 15. XAML에서 사용자 정의 클래스 정의<br />CenteredButton.xaml<br />UseCustomXamlClass.xaml<br /><Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> x:Class="Petzold.UseCustomXamlClass.CenteredButton"<br />HorizontalAlignment="Center"<br />VerticalAlignment="Center"<br /> Margin="12" /><br /><Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br />xmlns:src="clr-namespace:Petzold.UseCustomXamlClass" <br /> x:Class="Petzold.UseCustomXamlClass.UseCustomXamlClass"<br /> Title = "Use Custom XAML Class"><br /> <StackPanel Name="stack"><br /><src:CenteredButton>Button A</src:CenteredButton><br /> <src:CenteredButton>Button B</src:CenteredButton><br /> <src:CenteredButton>Button C</src:CenteredButton><br /> <src:CenteredButton>Button D</src:CenteredButton><br /> <src:CenteredButton>Button E</src:CenteredButton><br /> </StackPanel><br /></Window><br />
  16. 16. Cont’d<br />UseCustomXamlClass.cs<br />public UseCustomXamlClass()<br />{<br />InitializeComponent();<br />for (inti = 0; i < 5; i++)<br />{<br />CenteredButtonbtn = new CenteredButton();<br />btn.Content = "Button No. " + (i + 1);<br />stack.Children.Add(btn);<br />}<br />}<br />
  17. 17. 명확한 Main이 사라지는 현상<br />MyApplication.xaml<br />ApplicationDefinition으로 빌드 작업 설정<br />StartupUri는 Main 함수에서 호출되는 Run 메소드를 대체, 초기 Window 객체 띄움<br />MyApplication.cs<br />MyApplication.g.cs파일에서는 Main 메소드 있음<br />삭제가능<br /><Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> x:Class="Petzold.IncludeApplicationDefinition.MyApplication"<br />StartupUri="MyWindow.xaml" /><br />namespace Petzold.IncludeApplicationDefinition<br />{<br /> public partial class MyApplication : Application<br /> {<br /> }<br />}<br />
  18. 18. 코드가 없는 프로젝트<br />XAML 속에 데이터 바인딩을 가지고 있는 경우<br />XAML 애니메이션을 사용하는 경우<br />XamlOnlyApp.xaml<br />컴파일 시 클래스 자동 생성<br />XamlOnlyWindow.xaml<br />BAML<br /> 실제 구조는 코드를 가진 프로젝트와 유사<br /><Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />StartupUri="XamlOnlyWindow.xaml" /> <br /><Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br /> Title="Compile XAML Only"<br />SizeToContent="WidthAndHeight"<br />ResizeMode="CanMinimize"><br /> <StackPanel><br /> …<br /> </StackPanel><br /></Window><br />
  19. 19. XAML 파일 속에 C# 코드 넣기<br />앞의 CompileXamlOnly프로젝트와 유사<br />EmbeddedCodeWindow.xaml<br />필드 정의는 불가능<br />using등의 문제 해결 위해 System.Reflection네임스페이스의 클래스 숙지<br /><Window><br /><StackPanel><br />…<br /><x:Code><br /><![CDATA[<br /> …<br /> void ListBoxOnSelection(object sender, SelectionChangedEventArgsargs)<br />{<br /> string strItem = lstbox.SelectedItem as string;<br />System.Reflection.PropertyInfo prop = <br />typeof(Brushes).GetProperty(strItem);<br />elips.Fill = (Brush)prop.GetValue(null, null);<br />}<br />]]><br /></x:Code><br /></StackPanel><br /></Window><br />
  20. 20. 응용<br />리소스에 이미지 파일 추가<br />DesignXamlButtonWindow.xaml<br /><ButtonHorizontalAlignment="Center“ VerticalAlignment="Center“ Margin="24"><br /><StackPanel><br /><Polyline Stroke="Black"<br /> Points="0 10,10 0,20 10,30 0,40 10,50 0,<br />60 10,70 0,80 10,90 0,100 10" /><br /><Image Margin="0,10,0,0"<br /> Source="BOOK06.ICO" <br /> Stretch="None" /><br /><LabelHorizontalAlignment="Center"><br /> _Read Books!<br /></Label><br /><Polyline Stroke="Black"<br /> Points="0 0,10 10,20 0,30 10,40 0,50 10,<br />60 0,70 10,80 0,90 10,100 0" /><br /></StackPanel><br /></Button><br />
  21. 21. 20장 프로퍼티와 속성<br />
  22. 22. 동적 XAML Reader<br />XamlCruncher프로젝트<br />XamlCruncherAssemblyInfo.cs<br />프로그램 정보<br />XamlCruncherSettings.cs<br />public Dock Orientation = Dock.Left; // TextBox와 Frame 위치제어<br />public intTabSpaces = 4; // 탭키를누를때 삽입할공백개수<br />public string StartupDocument = // 처음나오는 XAML을설정<br />"<Button xmlns="http://schemas.microsoft.com/winfx" + <br /> "/2006/xaml/presentation" " +<br /> " xmlns:x="http://schemas.microsoft.com/winfx" + <br /> "/2006/xaml"> " +<br /> " Hello, XAML! " +<br /> "</Button> ";<br />// 생성자. 폰트지정<br />public XamlCruncherSettings()<br />{<br />FontFamily = "Lucida Console";<br />FontSize = 10 / 0.75;<br />}<br />
  23. 23. XamlCruncher.cs<br />XamlCruncher.cs<br />Window의 컨텐트가 될 Grid를 생성<br />Xaml이라는 최상위 메뉴와 하위 메뉴 생성<br />// DockPanel을 찾은 후 그것에서 TextBox를 제거<br />DockPaneldock = txtbox.Parentas DockPanel;<br />dock.Children.Remove(txtbox);<br />// Grid 생성, 3개의 열과 행<br />Grid grid=new Grid();<br />dock.Children.Add(grid);<br />// Xaml을 최상위 메뉴로 삽입<br />MenuItemitemXaml = new MenuItem();<br />itemXaml.Header = "_Xaml";<br />menu.Items.Insert(menu.Items.Count - 1, itemXaml);<br />
  24. 24. Cont’d<br />void Parse()<br />{<br />StringReaderstrreader = new StringReader(txtbox.Text);<br />XmlTextReaderxmlreader = new XmlTextReader(strreader);<br />try<br />{<br />object obj = XamlReader.Load(xmlreader); // 예외 상황 발생 시<br />txtbox.Foreground = SystemColors.WindowTextBrush;<br /> if (obj is Window)<br />{<br />// Window 객체를 위해서는 F7키를 눌렀을 때 독립된 창을 띄워줌<br />win = objas Window;<br />statusParse.Content = "Press F7 to display Window";<br />}<br /> else<br />{<br />// Frame 컨트롤의 Content 프로퍼티에 설정<br />win = null;<br />frameParent.Content = obj;<br />statusParse.Content = "OK";<br />}<br />}<br />catch (Exception exc)<br />{<br /> // TextBox의 텍스트 전체를 붉은색으로 표시하고 메시지를 상태표시줄에 표시<br />txtbox.Foreground = Brushes.Red;<br />statusParse.Content = exc.Message;<br />}<br />}<br />
  25. 25. 공백 개수 변경<br />XamlTabSpaceDialog.xaml<br />대화상자의 배치 정의<br />XamlTabSpaceDialog.cs<br />XamlCruncher.cs<br />Tab Space 메뉴 선택 시 위 대화상자 호출<br />public intTabSpaces<br />{<br />set { txtbox.Text = value.ToString(); }<br />get { return Int32.Parse(txtbox.Text);}<br />}<br />void TextBoxOnTextChanged(object sender,TextChangedEventArgsargs)<br />{<br />intresult;<br />btnOk.IsEnabled = (Int32.TryParse(txtbox.Text, out result) &&<br />result > 0 && result < 11);<br />}<br />void OkOnClick(object sender, RoutedEventArgsargs)<br />{<br />DialogResult = true;<br />}<br />
  26. 26. TextBox와 Frame의 위치 변경<br />XamlOrientationMenuItem.cs<br />
  27. 27. Star.xaml<br />Points 프로퍼티<br />PointCollection타입<br />연속적인 X와 Y 좌표를 포인트로 명세<br />숫자는 공백이나 콤마로 구분 가능<br />Fill 프로퍼티<br />Brushes 클래스의 정적 멤버 사용<br />16진법으로 RGB 색상 사용 가능<br />알파 채널 적용 가능 (128)<br />부동소수점으로 scRGB스킴으로 표현<br /><Polygon xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> Points="144 48, 200 222, 53 114, 235 114, 88 222"<br /> Fill="Red" <br /> Stroke="Blue"<br />StrokeThickness="5" /><br />Fill=“FF0000”<br />Fill=“#80FF0000”<br />Fill=“sc#0.5,1,0,0”<br />
  28. 28. LinearGradientBrush<br />적어도 2개의 값과 그라디언트스탑 필요<br />객체 엘리먼트(Polygon) & 프로퍼티 속성(Fill)<br />자식 엘리먼트를 포함하는 문법으로 프로퍼티 명세 가능 (프로퍼티엘리먼트, 속성요소)<br /><Polygon><br /><Polygon.Fill><br /> Red<br /> </Polygon.Fill><br /></Polygon><br /><Polygon.Fill><br /> <Brush><br /> Red<br /> </Brush><br /></Polygon.Fill><br />(Brush 타입의 Fill 프로퍼티 참조)<br /><Polygon.Fill><br /> <SolidColorBrush><br /> Red<br /> </ SolidColorBrush><br /></Polygon.Fill><br />(Brush는 SolidColorBrush타입의 객체로 변환가능)<br /><Polygon.Fill><br /> <SolidColorBrush Color=“Red”><br /> </ SolidColorBrush><br /></Polygon.Fill><br />(SolidColorBrush는 객체이므로 프로퍼티 가질 수 있음)<br /><!-- 잘못된 문법-><br /><Polygon.FillAttr=“Whatever”><br /> …<br /></Polygon.Fill><br />(프로퍼티는프로퍼티 가질 수 없음)<br />
  29. 29. Cont’d<br /><Polygon xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> Points="144 48, 200 222, 53 114, 235 114, 88 222"<br /> Stroke="Blue"<br />StrokeThickness="5"><br /> <Polygon.Fill><br /> <RadialGradientBrush><br /> <GradientStop Offset="0" Color="Blue" /><br /> <GradientStop Offset="1" Color="Red" /><br /> </RadialGradientBrush><br /> </Polygon.Fill><br /></Polygon><br />
  30. 30. 윈도우 컨텐트프로퍼티<br />DockPanel<br />Grid<br />StackPanel<br />
  31. 31. RoutedEvent<br />클래스와 이벤트 이름으로 속성으로 사용함으로써 이벤트 핸들러 설정 가능<br /><TextBlock.ContextMenu><br /> <ContextMenuMenuItem.Click="MenuItemOnClick"><br /> <MenuItem Header="Red" /><br /><MenuItem Header="Orange" /><br /><MenuItem Header="Yellow" /><br /><MenuItem Header="Green" /><br /><MenuItem Header="Blue" /><br /><MenuItem Header="Indigo" /><br /><MenuItem Header="Violet" /><br /></ContextMenu><br /></TextBlock.ContextMenu><br />
  32. 32. Thank you<br />Q&A<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×