Title of Presentation

Similar documents
Title of Presentation

서현수

임베디드 시스템 소프트웨어

Windows 8에서 BioStar 1 설치하기

PowerPoint Template

Microsoft PowerPoint - 권장 사양

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

4S 1차년도 평가 발표자료

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

Microsoft PowerPoint - chap01-C언어개요.pptx

슬라이드 1

..,. Job Flow,. PC,.., (Drag & Drop),.,. PC,, Windows PC Mac,.,.,. NAS(Network Attached Storage),,,., Amazon Web Services*.,, (redundancy), SSL.,. * A

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Visual Basic 반복문

BMP 파일 처리

학습목표 텍스트파일을다룰수있다. 스트림읽기, 쓰기를안다. 2

Chapter 1

목차 제 1 장 inexio Touch Driver소개 소개 및 주요 기능 제품사양... 4 제 2 장 설치 및 실행 설치 시 주의사항 설치 권고 사양 프로그램 설치 하드웨

슬라이드 1

SBR-100S User Manual

PowerPoint Presentation

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

DocsPin_Korean.pages

LG-LU6200_ICS_UG_V1.0_ indd

윈도우시스템프로그래밍

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

슬라이드 1

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

2010 년 10 월넷째주 ( ) 1. IT와타산업융합위한민관노력강화 2. 한국, IT산업분야국제표준제안건수세계 1위달성 3. 한국, 3년연속세계브로드밴드경쟁력 1위기록 4. 삼성SDS, 2011년 IT메가트렌드선정 'Smart' 와 'Social' 이핵심

<4D F736F F D205B4354BDC9C3FEB8AEC6F7C6AE5D3131C8A35FC5ACB6F3BFECB5E520C4C4C7BBC6C320B1E2BCFA20B5BFC7E2>

고객 카드

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

제 출 문 환경부장관 귀하 본 보고서를 습마트기기 활용 환경지킴이 및 교육 통합 서비스 개 발 과제의 최종보고서로 제출합니다. 주관연구기관 : 주관연구기관장 : 2015년 10월 주식회사 덕키즈 김 형 준 (주관)연구책임자 : 문종욱 (주관)참여연구원 : 김형준, 문병

임베디드 시스템 소프트웨어


K_R9000PRO_101.pdf

임베디드 시스템 소프트웨어

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

untitled

MVVM 패턴의 이해

Windows Live Hotmail Custom Domains Korea

untitled

Visual Studio online Limited preview 간략하게살펴보기

B _00_Ko_p1-p51.indd

DE1-SoC Board

Microsoft PowerPoint - 04-UDP Programming.ppt

3ÆÄÆ®-14

스마트월드캠퍼스 교육교제

어댑터뷰

Orcad Capture 9.x

chapter4

untitled

Install stm32cubemx and st-link utility

MAX+plus II Getting Started - 무작정따라하기

AGENDA 모바일 산업의 환경변화 모바일 클라우드 서비스의 등장 모바일 클라우드 서비스 융합사례

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

<4D F736F F D20B0B6B3EBC6AE33C3E2BDC3C8C45FC3D6C1BE5F2D2E646F63>

슬라이드 1

I What is Syrup Store? 1. Syrup Store 2. Syrup Store Component 3.

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

목 차 1. 안전을 위한 주의사항 2. 사 전에 2-1. 제품 특징 2-2. 제품 구성 2-3. 각 부분의 명칭 전 뷰어 / 뷰어 설정 전 뷰어 / 환경 설정 환경설정 본 값 재생방법 (블랙박스) 3-15.

Microsoft PowerPoint - Windows CE Programming_2008 [호환 모드]

CD-RW_Advanced.PDF

chap 5: Trees

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

안전을 위한 주의사항 제품을 올바르게 사용하여 위험이나 재산상의 피해를 미리 막기 위한 내용이므로 반드시 지켜 주시기 바랍니다. 2 경고 설치 관련 지시사항을 위반했을 때 심각한 상해가 발생하거나 사망에 이를 가능성이 있는 경우 설치하기 전에 반드시 본 기기의 전원을

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

untitled

슬라이드 1

임베디드 시스템 소프트웨어

BH의 아이폰 추천 어플

API 매뉴얼

F120S_(Rev1.0)_1130.indd


<4D F736F F D20C1A4BAB8B0FAC7D0C8B85F FC7CFB0E85F446F63>

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

쉽게 풀어쓴 C 프로그래밍

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

13 주차 - MDI, Exception, WebBrowser, RichTextBox, AlarmProgram 대림대학 년도 1 학기홍명덕

Microsoft Word - src.doc

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

00 SPH-V6900_....

LEICA C-LUX

(SW3704) Gingerbread Source Build & Working Guide

( )부록

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Remote UI Guide

<40C1B6BBE7BFF9BAB85F3130BFF9C8A32E687770>

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Transcription:

MICROSOFT WINDOWS PHONE 윈도우즈폰기본개발과정 2013.07.29 08.02[1 주차 ] 김명정 Microsoft Visual C# MVP Microsoft BizSpark Network Partner kmjrabbit@live.com

윈도우폰기본과정 1 일차 Windows Phone 7 개요 Windows Phone 7 소개, 개발도구설치, UX 디자인 (Metro- 모던 ) 소개 응용프로그램개발시작기본예제, 에뮬레이터기능, 프로젝트기본구성파일살펴보기 2 일차 UI 기본구성및활용타이머구현, Navigation 기능,ApplicationBar 정의, 센서정보 데이터바인딩방법과응용 3 일차 IsolatedStorage 격리저장소에데이터저장하기, 저장된데이터읽어오기 공용기능 Task&Chooser 2

윈도우폰기본과정 4 일차 Location Service GPS 정보활용하기 센서정보진동 (Vibrate) 처리, 가속도계 (Accelerometer), 멀티터치구현 MultiMedia 그래픽관련컨트롤사용, 간단한 MusicPlayer 및동영상재생 5 일차 네트워크 WCF 와 LINQ, RSS 구현하기 Notification 3

쉽게시작할수있는개발환경 (1) http://create.msdn.com http://msdn.microsoft.com/ko-kr 세계최대수준의라이브러리및예제라이브러리 > 폰및 WINDOWS PHONE > 각메뉴들 http://phone.codeplex.com 유용한라이브러리소스제공검색 : Windows Phone 4

쉽게시작할수있는개발환경 (1) http://www.windowsphone.com/ko-kr/phones Microsoft 개발자방송국인 Channel 9, 개발자팀블로그, 국내외 Silverlight, Xbox, Windows Phone 개발자커뮤니티등등 5

쉽게시작할수있는개발환경 (2) http://windowsphone.interoperabilitybridges.com/ Guide for ios/iphone Developers iphone App 을 Windows Phone 7 으로변경하는데있어서필수적인 API mapping Guide 를제공 Guide for Android Developers 안드로이드개발자를위한윈도우폰 API 매핑툴및 Guide 제공 6

Windows Phone 7 이전에 2002 년 11 월 XBox Live Service launched 2006 년 11 월 WPF(XAML) 2007 년 05 월 Games for Windows Live launched 2007 년 09 월 Silverlight(WPF/E) 1.0 released 2008 년 10 월 XNA Game Studio 3.0 (Cross-platform games that work on Windows, Xbox 360, Zune) 2009 년 09 월 ZuneHD (Multi-touch, Metro UI style, FM Radio, MarketPlace) 2010 년 10 월 Windows Phone 7 official released :EU ( 북미 :11 월 ) 영어, 독어, 불어, 스페인어, 이태리어먼저출시 2011 년 02 월 Windows Phone 7 First Major Update 2011 년 05 월 24 일. Mango SDK beta1, 한글에뮬레이터 2011 년 06 월 29 일. Mango SDK beta2 2012 년 10 월 Windows Phone 8 SDK 7

전망 2005년버전이후정체 2010년윈도우폰전격발표 2011년 11월한국출시예정유일한非아이폰스타일기존제품들과의연계 / 연관영향력기업시장중심의수요아이폰의독점적운영및선호도감소안드로이드의공개방식의우려다양한스마트폰의공존 타 AppStore 보다출시가늦은앱이많지만, 앞으로만들수있는앱이더많은강점 8

망고살펴보기 : v7.1 beta1(1) 2011 년 5 월 24 일윈도우폰 7.1(beta1) 망고공개 ( 미국현지시각 ) 500 개이상의새로운기능추가한글지원, 국내 2011 년 11 월출시예정멀티테스킹기능강화, Background 프로세서 (Audio, FileTransfer, Tile 등등 ) 강화라이브타일에서업데이트내용을표시해주는 앱커넥터 모바일익스플로러 9 탑재 SNS 강화 ( 페이스북, 윈도우라이브메시지를통한 SNS 접속 ) MS 오피스제품군과의연동 MS 에서제공하는클라우드서비스인 스카이드라이브 와 오피스 365 에접속해문서공유및편집가능 (25GB 의개인저장공간무료제공 ) 9

망고살펴보기 : v7.1 beta1(2) 윈도우폰 7 탑재스마트폰의증가 ( 망고탑재한스마트폰 9 종 ) HTC 제품 2 종 ( 오메가 3.8 인치 / 이터니티 4.7 인치 ) 델제품 1 종 ( 리글리 4 인치 ), 에이서제품 2 종삼성제품 4 종 ( 엑시노스탑재유력 / 갤럭시 s2 와유사 ) 윈도우폰 7 전용앱스토어인 윈도폰마켓플레이스 를국내시장에정식론칭할계획 Joe Beliore 트위터에윈도우폰의기능들중의하나인 Zune, Bing, Speech 등의연동기능들을미국과영국이외의지역에도점차확대할것이라고전함. SkyDrive 동기화기능 ( 업로드시백그라운드로동작되므로전송시다른기능들을동작시킬수있다.) Xbox 360 사용자들을위한 Windows Phone Avata 도구 (Prop) 무료제공 안드로이드개발자를위한윈도우폰 API 매핑제공 게임내아이템구입 (in-app) API 지원 10

망고살펴보기 : v7.1 beta2 2011 년 6 월 29 일윈도우폰 7.1(beta2) 망고공개 Visual Basic Support : 툴에통합되어따로설치안함. Multi-Targeting and App Compatibility : 기존 7.0 의모든앱은 7.1 에서똑같이돌아감 Device Status : 장치상태정보접근이확장됨. 배터리, 하드웨어키보드등 Isolated Storage Explorer : 격리저장소에있는파일및디렉토리목록보기,, 복사, 삭제변경기능을명령어로가능. Launchers and Choosers : 새로운런쳐, 츄저지원 - Address Chooser Task, Bing Maps Task, Bing Maps Directionns Task, Game Invite Task - Save Contact Task, Save Ringtone Task,, Share Link Task, Share Status Task Contacts and Calendar : 연락처 / 달력자료를읽기전용으로접근가능 Encrypted Credential Store : 암호화관련 API 제공 Camera : 카메라에프로그래밍적으로접근가능 odata Client : Open Data Protocol 클라이언트지원 11

Windows Phone 8 살펴보기 : v8 2012 년 10 월윈도우폰 8 공개 Windows Phone SDK 8.0 Windows Phone SDK 8.0 을사용하여 Windows Phone 8 및 Windows Phone 7.5 장치용앱을개발할수있다. 시스템요구사항 - 설치가능한 OS : Windows 8, Windows 8 P, Windows 8 64bit -Hardware : 4GB of free hard disk space, 4GB RAM, 64bit CPU -Windows Phone 8 Emulator : Windows 8 pro edition or greater 12

Windows Phone 8 : Nokia Lumia 920 디스플레이 4.5inch PureMotion HD + IPS LCD 768*1280 해상도, 332ppi 저장공간저장공간 32GB, RAM 1024MB 카메라 8.7MP, 1080p HD 동영상, 전면카메라, LED 플래시, 자동초점, 칼자이스렌즈, 광학식손떨림보정 프로세서 1.5GHz MSM8960 듀얼코어 소프트웨어 : Windows Phone 8 배터리수명 : 통화 9 시간, 대기 320 시간, 무선충전 네트워크 GSM850, 900, 1800, 1900, W-CDMA 850, 900, 1900, 2100, LTE 800,900,1800, 2100, 2600 13

Windows Phone 7 v7.1 http://go.microsoft.com/fwlink/?linkid=213054 버전표기는 v7.5 가아닌 v7.1 새롭게추가된내용살펴보기 http://msdn.microsoft.com/en-us/library/ff637516.aspx 14

Windows Phone 7 v7.1 beta2 설치하기 http://create.msdn.com http://www.microsoft.com/download/en/details.aspx?displaylang=e n&id=26648 ISO 버전다운받기 http://go.microsoft.com/fwlink/?linkid=220415 DAEMON TOOL 다운받기 http://file.naver.com/pc/view.html?fnum=277449&cat=44 15

Windows Phone 7 v7.1 beta2 개발환경 Overview - Windows Phone SDK 7.1(Beta2) - Windows Phone Emulator(Beta2) - Windows Phone SDK 7.1 Assemblies(Beta2) - Silverlight 4 SDK and DRT - Windows Phone SDK 7.1 Extensioons for XNA Game Studio 4.0 - Microsoft Expression Blend SDK Preview for Windows Phone 7.1 - WCF Data Services Client for Widows Phone 7.1 -Microsoft Advertising SDK for Windows Phone 7 System Requirements - Windows 7, Windows Vista (Sp2) - Installation requires 4GB of free disk space, on the system drive, 3GB RAM - Windows Phone Emulator requires a DirectX 10 or above capable graphics card with a WDDM 1.1 driver The Windows Phone Developer Tools is compatible with the final version of Visual Studio 2010 SP1. If Windows Phone Developer Tools 7.1 Beta is installed on the machine, please uninstall it before installing this product. 16

Windows Phone 8 v8 설치하기 http://create.msdn.com https://dev.windowsphone.com/ko-kr/downloadsdk WPExpress_full.exe 다운로드후실행 ISO 파일다운로드 http://go.microsoft.com/fwlink/?linkid=257234&clcid=0x409 17

Windows Phone 8 SDK 8.0 Overview - Windows Phone SDK 7.1(Beta2) - Windows Phone Emulator(Beta2) - Windows Phone SDK 7.1 Assemblies(Beta2) - Silverlight 4 SDK and DRT - Windows Phone SDK 7.1 Extensioons for XNA Game Studio 4.0 - Microsoft Expression Blend SDK Preview for Windows Phone 7.1 - WCF Data Services Client for Widows Phone 7.1 -Microsoft Advertising SDK for Windows Phone 7 System Requirements - Windows 7, Windows Vista (Sp2) - Installation requires 4GB of free disk space, on the system drive, 3GB RAM - Windows Phone Emulator requires a DirectX 10 or above capable graphics card with a WDDM 1.1 driver The Windows Phone Developer Tools is compatible with the final version of Visual Studio 2010 SP1. If Windows Phone Developer Tools 7.1 Beta is installed on the machine, please uninstall it before installing this product. 18

Windows Phone 8 살펴보기 : v8 2012 년 10 월 30 일윈도우폰 8 공개 Windows Phone SDK 8.0 Windows Phone SDK 8.0 을사용하여 Windows Phone 8 및 Windows Phone 7.5 장치용앱을개발할수있다. 시스템요구사항 - 지원되는운영체제 : Windows 8, Windows 8 Pro - 운영체제유형 : Windows 8 64 비트클라이언트버전 - 하드웨어 : 6.5GB 의하드디스크여유공간, 4GB RAM, 64bit CPU -Windows Phone 8 Emulator : Windows 8 pro edition 버전이상 : SLAT( 두번째수준주소변환 ) 을지원하는프로세서필요 19

20 Windows Phone 7

Windows Phone 7 출시모델 Samsung Focus LG Quantum HTC Surround HTC HD7 Dell Venue Pro 날씬하고가벼움 110g 많은사진카메라기능강화 선명한 4 인치슈퍼아몰레드화면 수평 QWERTY 자판내장쉬운입력 간편한 Office Mobile 사용 5 메가픽셀사진촬영 슬라이드형스트레오스피커 16GB 내장메모리 음악비디오공유기능 원활히연결 윈도우폰중가장큰화면 Netflix, T-Mobile TV, Slacker Radio 수직 QWERTY 자판내장빠른입력 긁힘 & 깨짐적음 Dell 모델은 T 모바일유일 AT&T 출시 AT&T 출시 AT&T 출시 T 모바일출시 T 모바일출시 21

Windows Phone 8 출시모델 Nokia Limia 920 광학식손떨림보정및칼자이스렌즈의조합으로어두운곳에서플래시없이선명한사진과동영상촬영가능 Smart Shoot 은여러장의사진에서가장좋은장면만을합쳐완벽한사진을만듬 Nokia Lumia 820 칼자이스렌즈가장착된 800 만화소카메라, 선명한컬러와 4.3 인치 ClearBlack 디스플레이가특징. Windows Phone 8x By HTC 편리한셀프촬영 210 만화소의초광각전면카메라단독탑재된 Beats Audio 및내장앰프로스튜디오급의고품질음향제공 Nokia Lumia 620 Windows Phone 8S by HTC 스틸이미지에모션을더하는 Cinemagraph지원대담한색상과눈에띄는디자인보다풍부한음질을선사하는 Beats Audio 500만화소카메라 Huawei Ascend W1 고용량의 1950mAh 배터리장착하여며칠동안연락을주고받음. 1.2GHz 듀얼코어프로세서덕분에게임의응답속도가크게향상 22

23 Windows Phone 디자인 (Metro Design, 모던스타일 )

Windows Phone 허브 (HUBs) PEOPLE OFFICE PICTURES MUSIC+VIDEO MARKETPLACE GAMES 24

Windows Phone (Pictures & People) Pictures 사진과동영상을주변사람들과공유 PEOPLE OFFICE PICTURES MUSIC+VIDEO MARKETPLACE People GAMES SNS FACEBOOK, 윈도우라이브 소셜네트워크에접속해서컨텐츠공유가능 25

26 Windows Phone ( 화면구성부분 )

27 Windows Phone 7 (UI)

Windows Phone 7 (UI-Weather) 정보시작화면표면에요약표시 관련자신의위치에맞게날씨업데이트 연결자신의연락처의날씨들 28

Windows Phone 7 (UI-System Tray) 1) Signal strength 2) Data connection 3) Call forwarding 4) Roaming 5) Wireless network signal strength 6) Bluetooth status 7) Ringer mode 8) Input status 9) Battery power level 29 10) System clock

30 Windows Phone 8 (UI)

WP7 개발시작 (WP7Begin) 프로젝트생성방법모든프로젝트는다음순서대로생성한다. 개발환경구축예제 - c:\wp7\wp7begin - System.Environment.OSVersion 출력해보기 - Debug -XAML 에서버튼추가 <button Content= OSVersion? x:name= btnver Height= 72 Click= btnver_click /> -CS 에서의이벤트처리 private void btnver_click(object sender, RoutedEventArgs e) MessageBox.Show(System.Environment.OSVersion.ToString()); 31

WP7, WP8 개발시작 ( 프로젝트생성순서 ) 프로젝트생성방법 1.Microsoft Visual Studio Express 2012 for Windows Phone 을실행한다. 2. 메뉴 File > New Project 를선택한다. 3. 왼쪽 Templates 에서 Visual C# > Windows Phone 을선택한다. 4.Windows Phone App 을선택한후 Name 칸에프로젝트명을입력한후 OK 를누른다. 5. 생성할프로젝트의버전을선택한다. V7.1, V8.0 32

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 1. StackPanel 2. Grid 3. Canvas 4. Panel 5. WrapPanel (ToolKit 이용 ) - 에뮬레이터 33

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 1.StackPanel : 여러 UI 요소들을수평또는수직방향으로나열하는레이아웃컨트롤 <StackPanel Orientation= Horizontal > <Button Content= Button1 /> <Button Content= Button2 /> </StackPanel> : 각각의 UI 요소들을추가된순서대로위에서아래로또는왼쪽에서오른쪽으로나열시킨다. : Orientation 속성에의해나열방향이결정된다. ( 기본값 :Vertical) 34

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 2.Grid : Layout 컨트롤중가장많은기능을제공. 행과열로구분. <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> </Grid> : RowDefinition 에는 Height, ColumnDefinition 에는 Width 속성값을설정해변경가능. : Width, Height 값은 pixel( 고정크기 ), Auto, 스타 (*) 값을가짐. Auto- 해당칸을채우는컨트롤의크기에따라자동변경된다. 스타 (*)- 균등분할을하기위한단위 35

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 3.Canvas : UI 요소의위치를직접지정하는컨트롤. <Canvas> <Button Canvas.Top= 20 Canvas.Left= 20 Content= Button 1 /> <Button Canvas.Top= 60 Canvas.Left= 20 Content= Button 2 /> </Canvas> : Canvas 컨트롤내각 UI 요소의위치는 Canvas 컨트롤의상단에서부터 UI 요소까지의거리를의미하는 Canvas.Top 속성과 Canvas 컨트롤의왼쪽부터 UI 요소까지의거리를의미하는 Canvas.Left 속성값을결정됨. : 좌표값으로 UI 컨트롤들을배치시키므로컨트롤들이겹칠수있다. UI 컨트롤이겹쳐질때어떤컨트롤을위로보여줄것인지를결정하기위해서는 Canvas.Zindex 속성값을이용하면된다. 클수록상단에배치됨. 36

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 4. Panel : 대부분의레이아웃컨트롤들이상속하는부모클래스대부분의레이아웃컨트롤의필요한기능들은모두 Paenl 컨트롤에구현되어있다. : Height - 패널높이를지정하거나가져옴. Width, MinHeight, MaxHeight, MinWidth, MaxWidth, Visibility, Margin( 바깥여백 ), Padding( 안쪽여백 ) 37

WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 5. WrapPanel : Silverlight for Windows Phone 7 에서는기본지원하지않는컨트롤 silverlight for windows phone 7 toolkit 을활용 : http://silverlight.codeplex.com 에서다운로드하여설치 : 해당프로젝트에서 dll 참조추가 : xaml 내 using(xmlns:toolbox=. ) <toolkit:wrappanel x:name= wrappanel1 > <Button Content= Button1 /> <Button Content= Button2 /> <Button Content= Button3 /> </toolkit:wrappanel> : StackPanel 의단점을보완하여여러개의컨트롤을배치하면자동 Wrap 이이루어짐 38

WP7 개발시작 (WP7Begin) 참고사항 - 에뮬레이터 : 종료 : 최소화 : 오리엔테이션 : 방향 : 하드키보드사용 (PgUp/PgDn/Pause) : 인터넷익스플로러 : 환경설정 ( 테마변경 ) - Mango v7.1 업데이트후에뮬레이터의변화 : 여러개의언어를지원 - 설정 (Setting)>> 언어설정 (region+language) : 인터넷익스플로러에서의주소입력부분의위치변화 ( 상단 -> 하단 ) : 에뮬레이터의한글은눈에띄나 100% 한글화는되어있지않다. : 에뮬레이터내에서가속도계와 GPS 값을보낼수있다. 39

WP7 개발시작 (WPA01) 프로젝트생성방법모든프로젝트는교재 P.62 순서대로생성한다. 개발환경구축예제 - c:\wp7\wpa01 - HelloWorld!! 출력, CS 코드에서작업 - Debug -CS 에서의코드생성 (MainPage.xaml-MainPage.xaml.cs 스켈레톤파일 ) public MainPage() InitializeComponent(); ApplicationTitle.Text = WPA01 Application ; PageTitle.Text = Hello World!! ; TitlePanel.Height=200; ApplicationTitle.Height=50; ApplicationTitle.FontSize=40; 40

WP7 개발시작 (WPA01) 참고사항 - Expression Blend 에서열어보기 - 솔루션탐색기살펴보기 ( 프로젝트생성파일들 ) : Properties 폴더내 : AppManifest.xml XAP 파일에대한설명서 : AssemblyInfo.cs 프로그램명 / 버전정보등을기록 : WMAppManifest.xml - 아이콘, 타이틀등을설정하는메타데이터파일 - 시작 XAML 파일설정 (DefaultTask NavigationPage= 시작 XAML 파일 />) : References 폴더 생성한프로젝트에서참조한네임스페이스들 : App.xaml / App.xaml.cs - 프로젝트내에서의전역이벤트처리 - ASP.NET 에서의 Web.Config 역할 : ApplicationIcon.png - 앱의기본아이콘 : Background.png 기본배경이미지 : MainPage.xaml / MainPage.xaml.cs - 기본페이지 : SplashScreenImage.jpg 로드되는동안보여지는페이지 41

WP7 개발시작 (WPA01) 참고사항 - MainPage.xaml 구성 : 기본적인 Silverlight 파일과구성이유사함. : PhoneApplicationFrame > PhoneApplicationPage >> Grid(LayoutRoot) >>> StackPanel(TitlePanel) >>>> TextBlock(ApplicationTitle) >>>> TextBlock(PageTitle) >>> Grid(ContentPanel) : XAML 코드 <phone:phoneapplicationpage> <Grid> <Grid.RowDefinitions> <RowDefinitions/><RowDefinitions/> </Grid.RowDefinitions> <StackPanel Grid.Row= 0 ><TextBlock/><TextBlock/></StackPanel> <Grid Grid.Row= 1 ></Grid> </Grid> </phone:phoneapplicationpage> 42

WP7 개발시작 (WPA02) 프로젝트생성방법모든프로젝트는교재 P.62 순서대로생성한다. 개발환경구축예제 - c:\wp7\wpa02 - 화면터치정보를핸들링하는방법 - Debug, output 창에상태출력 43

WP7 개발시작 (WPA02) -XAML 에서기존코드수정 <Grid x:name= LayoutRoot Background= Transparent MouseMove= Layout_MouseMove MouseLeftButtonDown= Layout_MouseLeftButtonDown MouseLeftButtonUp= Layout_MouseLeftButtonUp >.. </Grid> -CS 에서의코드생성 private void LayoutRoot_MouseMove(object sender, MouseEventArgs e) Point pos = e.getposition(this); System.Diagnostics.Debug.WriteLine( ::Move:: + pos.x.tostring() + + pos.y.tostring()); private void LayoutRoot_MouseLeftButtonDown( ) private void LayoutRoot_MouseLeftButtonUp( ) 코드생성 44

WP7 개발시작 (WPA02) 참고사항 - Point (msdn 참조 ) System.Windows 네임스페이스내에위치하는구조체 2 차원공간에서 X 및 Y 좌표쌍을나타낸다. - Debug.WriteLine() 메서드디버깅하는데필요한메서드및속성집합을제공 System.Diagnostics 네임스페이스내에위치함. System.Diagnostics.Debug.WriteLine() 을연속으로적기힘들면 cs 코드내상단 namespace 부분에 System.Diagnostics; 를추가시 Debug.WriteLine() 만기입이가능. 45

WP7 개발시작 (WPA03) 개발환경구축예제 - c:\wp7\wpa03 - 타이머 ( 일정한시간간격으로이벤트발생 ) - Debug -XAML 에서코드생성 <Grid x:name= ContentPanel Grid.Row= 1 Margin= 12,0,12,0 > <Button Content= Start Height= 90 Width= 311 Margin= 73,95,0,0 HorizontalAlignment= Left VerticalAlignment= Top x:name= button1 Click= button1_click IsEnabled= True /> <Button Content= End Height= 90 Width= 311 Margin= 73,208,0,0 HorizontalAlignment= Left VerticalAlignment= Top x:name= button2 Click= button2_click /> </Grid> 46

WP7 개발시작 (WPA03) -CS에서의코드생성 using System.Windows.Threading; using System.Diagnostics; long m_ltick = 0; DispatcherTimer timer = null; public MainPage() InitializeComponent(); button1.isenabled = true; button2.isenabled = false; // 타이머사용을위해추가 // 디버깅시 output출력 // 타이머간격을체크하기위한값 // 실제코드를통해사용한타이머선언 // 버튼의상태를활성화 // 버튼의상태를비활성화 47

WP7 개발시작 (WPA03) 48 -CS에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) if(timer == null) 상태 timer = new DispatcherTimer(); 생성 timer.interval = new TimeSpan(0,0,1); // 타이머간격지정 ( 시, 분, 초 ) timer.tick += new EventHandler(timer_Tick); timer.start(); 작동 button1.isenabled = false; button2.isenabled = true; void timer_tick(object sender, EventArgs e) 함수 long ltick = System.DateTime.Now.Ticks / 10000; // 타이머설정하지않은 // 타이머 // 설정된타이머를 //timer Interval 간격이되면실행될

WP7 개발시작 (WPA03) 참고사항 - 조건문 if 문 (1) if( 조건이참이면 ) 여기를실행 if 문 (2) if( 조건 1 이참이면 ) 여기를실행 else if( 또다른조건 2 가참이면 ) 여기를실행 else 이것저것둘다아니면여기를실행 49

WP7 개발시작 (WPA04) 개발환경구축예제 - c:\wp7\wpa04 - 시계 - Debug -XAML 에서코드생성 <Grid x:name= ContentPanel Grid.Row= 1 Margin= 12,0,12,0 > <TextBlock Height= 73 Width= 364 HorizontalAlignment= Left Margin= 60,60,0,0 Name= textblock1 Text= TextBlock VerticalAlignment= Top /> <TextBlock Height= 73 Width= 364 HorizontalAlignment= Left Margin= 60,190,0,0 Name= textblock2 Text= TextBlock VerticalAlignment= Top /> </Grid> 50

WP7 개발시작 (WPA04) -CS 에서의코드생성 using System.Windows.Threading; DispatcherTimer timer = null; // 타이머사용을위해추가 // 실제코드를통해사용한타이머선언 public MainPage() InitializeComponent(); timer = new DispatcherTimer(); timer.interval = new TimeSpan(0,0,1); timer.tick += new EventHandler(timer_Tick); timer.start(); 51

WP7 개발시작 (WPA04) -CS에서의코드생성 void timer_tick(object sender, EventArgs e) DateTime dt1 = DateTime.Now.ToLocalTime(); DateTime dt2 = DateTime.Now.ToUniversalTime(); String str1; str1 = String.Format( 0,4.1,2.2,2 3,2:4,2:5,2, dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, dt1.second); String str2; str2 = String.Format( 0,4.1,2.2,2 3,2:4,2:5,2, dt2.year, dt2.month, dt2.day, dt2.hour, dt2.minute, dt2.second); textblock1.text = str1; textblock2.text = str2; // 현재시간 // 국제표준시간 52

WP7 개발시작 (WPA04) 참고사항 - String.Format String.Format( 0,4.1,2.2,2 3,2:4,2:5,2, dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, dt1.second); YYYY.MM.DD HH:MM:SS String.Format( 순서, 자릿수, 순서에위치할값 ); - 맞춤, 여백및안쪽여백 FrameworkElement 클래스는자식요소의위치를정확하게지정하는데여러속성을노출한다. : HorizontalAlignment 가로정렬 : VerticalAlignment 세로정렬 : Margin - 요소의바깥여백 <object Margin= left, top,right,bottom /> or <object Margin= left, top /> : Padding 요소의안쪽여백 53

WP7 개발시작 (WPA05) 개발환경구축예제 - c:\wp7\wpa05 - 이벤트핸들러활용 - Debug -XAML 에서코드생성 <Grid x:name= ContentPanel Grid.Row= 1 Margin= 12,0,12,0 > <Button Content= Button Height= 86 Width= 357 HorizontalAlignment= Left VerticalAlignment= Top Margin= 46,165,0,0 Name= button1 Click= button1_click /> <TextBox Text= TextBox Height= 86 Width= 357 HorizontalAlignment= Left VerticalAlignment= Top Margin= 46,42,0,0 Name= textbox1 TextChanged= textbox1_textchanged KeyDown= textbox1_keydown /> </Grid> 54

WP7 개발시작 (WPA05) -CS 에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) PageTitle.Text = textbox1.text; private void textbox1_textchanged(object sender, TextChangedEventArgs e) ApplicationTitle.Text = textbox1.text; private void textbox1_keydown(object sender, KeyEventArgs e) if(e.key == Key.D1) System.Diagnostics.Debug.WriteLine( 숫자 1 ); 55

WP7 개발시작 (WPA06) 56 개발환경구축예제 - c:\wp7\wpa06 - 다양한버튼의기능및이벤트처리 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0"> <CheckBox Content="CheckBox" Height="82 Width="414 Margin="26,30,0,0 HorizontalAlignment="Left" VerticalAlignment="Top Name="checkBox1" Click="checkBox1_Click Checked="checkBox1_Checked"/> <CheckBox Content="CheckBox" Height="82" Width="414 Margin="26,107,0,0 HorizontalAlignment="Left" VerticalAlignment="Top Name="checkBox2"/> <RadioButton Content="RadioButton" Height="82" Margin="26,206,0,0 HorizontalAlignment="Left" VerticalAlignment="Top Name="radioButton1"/> <RadioButton Content="RadioButton" Height="82" Margin="26,274,0,0 HorizontalAlignment="Left" VerticalAlignment="Top Name="radioButton2"/> <HyperlinkButton Content="HyperlinkButton" Height="55" Width="281" Margin="51, 404,0,0 HorizontalAlignment="Left" VerticalAlignment= Top Name= hyperlinkbutton1 Click= hyperlinkbutton1_click /> </Grid>

WP7 개발시작 (WPA06) -CS 에서의코드생성 private void checkbox1_click(object sender, RoutedEventArgs e) System.Diagnostics.Debug.WriteLine( Click ); private void checkbox1_checked(object sender, RoutedEventArgs e) System.Diagnostics.Debug.WriteLine( Checked ); 57

WP7 개발시작 (WPA06) 58 -CS 에서의코드생성 private void hyperlinkbutton1_click(object sender, RoutedEventArgs e) String strmsg = ; if(checkbox1.ischecked == true) strmsg += C1 ; if(checkbox2.ischecked == true) strmsg += C2 ; if(radiobutton1.ischecked == true) strmsg += R1 ; if(radiobutton2.ischecked == true) strmsg += R2 ; MessageBox.Show(strMsg);

WP7 개발시작 (WPA06) 참고사항 - 윈도우에서지원하는버튼들 : CheckBox - 옵션체크와같이항목의유 / 무를선택할때사용 : RadioButton 여러가지중하나만선택시사용 : HyperlinkButton 다른항목으로연결을위한버튼. 브라우저의링크 : Button 일반적인버튼. 누르면해당상태에따라색이바뀜. - CheckBox 의클릭이벤트 CheckBox 의클릭이벤트는클릭될때마다발생하므로체크상태가되거나체크가없어지는두경우모두를나타낸다. 59

WP7 개발시작 (WPA07) 개발환경구축예제 - c:\wp7\wpa07 - 진행바 (ProgressBar) 와 Slider -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <ProgressBar Height= 114 HorizontalAlignment= Left VerticalAlignment= Top Margin= 16,50,0,0 Name= progressbar1 Width= 434 /> <Slider Height= 114 Width= 434 HorizontalAlignment= Left VerticalAlignment= Top Margin= 16,211,0,0 Name= slider1 ValueChanged= slider1_valuechanged /> </Grid> 60

WP7 개발시작 (WPA07) -CS 에서의코드생성 public MainPage() InitializeComponent(); progressbar1.minimum = 0; progressbar1.maximum = 100; slider1.minimum = 0; slider1.maximum = 100; private void slider1_valuechanged(object sender, RoutedPropertyChangedEventArgs<double> e) double dbval = slider1.value; progressbar1.value = dbval; System.Diagnostics.Debug.WriteLine(dbVal); 61

WP7 개발시작 (WPA07) 참고사항 - SupportedOrientation : 화면방향전환 : Silverlight 에서의방향 세로 (portrait) 기본 : XNA 에서의방향 가로 (Landscape) 기본 : 속성변경 PhoneApplicationPage 태그에서의 SupportedOrientation 속성을기본 portrait 에서 PortraitOrLandScape 로변경시디바이스나에뮬레이터의상태에따라가로 / 세로방향자동변경 : OnOrientationChanged 메서드 args.orientation.tostring() 현재방향값반환 참고예제 ) c:\wp7\wpsupportedorientation 62

WP7 개발시작 (WPA07Ext01) 개발환경구축예제 - c:\wp7\wpa07ext01 - Slider 활용, SliderBar 를움직일때변환되는상태값을출력하고 Rectangle 에값을조정해서크기및위치변경하기 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Grid.RowDefinitions> <RowDefinition Height= 150 /> <RowDefinition Height= * /> </Grid.RowDefinitions> <Slider HorizontalAlignment= Center VerticalAlignment= Top Width= 400 Grid.Row= 0 x:name= slider1 ValueChanged= slider1_valuechanged /> <TextBlock FontSize= 24 Height= 67 HorizontalAlignment= Left Grid.Row= 0 Margin= 12,90,0,0 Name= textblock1 Text= 현재값은? VerticalAlignment= Top Width= 444 /> <Canvas x:name= canvas01 Grid.Row= 1 Width= 400 Height= 400 Background= AliceBlue /> </Grid> 63

WP7 개발시작 (WPA07Ext01) -CS 에서의코드생성 private Rectangle rect; public MainPage() InitializeComponent(); rect = new Rectangle(); //Rectangle 클래스의개체선언 //Rectangle 클래스의인스턴스생성 64

WP7 개발시작 (WPA07Ext01) -CS 에서의코드생성 private void slider1_valuechanged(object sender, RoutedPropertyChangedEventArgs<double> e) canvas01.children.clear(); textblock1.text= 현재값은? + slider1.value; SolidColorBrush scb = new SolidColorBrush(); scb.color = Colors.Orange; rect.fill = scb; //rect.fill = new SolidColorBrush(Colors.Orange) rect.height=slider1.value * 10; rect.width=slider1.value * 10; Canvas.SetLeft(rect, slider1.value * 5); Canvas.SetTop(rect, slider1.value + 5); //slider 의값으로 rect 크기지정 // 해당위치에배치 canvas01.children.add(rect); 65

WP7 개발시작 (WPA08) 개발환경구축예제 - c:\wp7\wpa08 - 리스트박스 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <ListBox Height= 527 HorizontalAlignment= Left Name= listbox1 VerticalAlignment= Top Width= 456 Margin= 0,80,0,0 FontSize= 28 SelectionChanged= listbox1_selectionchanged /> <Textbox Height= 72 HorizontalAlignment= Left Name= textbox1 VerticalAlignment= Top Text= TextBox Width= 460 KeyDown= textbox1_keydown /> </Grid> 66

WP7 개발시작 (WPA08) -CS 에서의코드생성 public MainPage() InitializeComponent(); textbox1.text = ; textbox1.focus(); private void textbox1_keydown(object sender, KeyEventArgs e) if(e.key == Key.Enter) listbox1.items.add( 아이템 : + textbox1.text); // 리스트박스아이템추가 textbox1.text = ; 67

WP7 개발시작 (WPA08) -CS 에서의코드생성 private void listbox1_selectionchanged(object sender, SelectionChangedEventArgs e) int nsel = listbox1.selectedindex; if(nsel < 0 nsel >= listbox1.items.count) return; String strtext = listbox1.items[nsel].tostring(); String strout1 = String.Format( 선택한라인은 0 입니다., nsel +1); String strout2 = String.Format( 0 를선택합니다., strtext); String strout = strout1 + strout2; // 선택한항목의문자열 MessageBoxResult nres; nres = MessageBox.Show(strOut, 선택삭제, MessageBoxButton.OKCancel); if(nres == MessageBoxResult.OK) listbox1.items.removeat(nsel); // 선택한항목의아이템삭제 68

WP7 개발시작 (WPA09) 개발환경구축예제 - c:\wp7\wpa09 - 웹브라우저활용 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <TextBox Height= 79 HorizontalAlignment= Left Name= textbox1 Text= TextBox VerticalAlignment= Top Width= 456 KeyDown= textbox1_keydown /> <phone:webbrowser HorizontalAlignment= Left Margin= 0,85,0,0 Name= webbrowser1 VerticalAlignment= Top Height= 522 Width= 456 /> </Grid> 69

WP7 개발시작 (WPA09) -CS 에서의코드생성 public MainPage() InitializeComponent(); textbox1.text = http://www.naver.com ; private void textbox1_keydown(object sender, KeyEventArgs e) if(e.key == Key.Enter) String struri = textbox1.text; textbox1.text = ; webbrowser1.focus(); webbrowser1.navigate(new Uri(strUri, UriKind.Absolute)); 70

WP7 개발시작 (WPA20) 개발환경구축예제 - c:\wp7\wpa20 - 화면호출 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Canvas.Left= 117 Canvas.Top= 184 Content= Button Height= 99 Name= button1 Width= 204 Click= button1_click /> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Portrait Page > Page1.xaml 생성 > PageTitle 변경 (Sub Page) 71

WP7 개발시작 (WPA20) -CS(MainPage.xaml.cs) 에서의코드생성 private void button1_click(object sender, KeyEventArgs e) NavigationService.Navigate(new Uri( /Page1.xaml, UriKind.Relative)); 72

WP7 개발시작 (WPA20) 참고사항 - Uri : 지정된 uri 를사용하는 uri 클래스의새인스턴스를초기화함. : uri 문자열이상대 uri 또는절대 uri 인지아니면결정되지않았는지여부를지정할수있음. 73

WP7 개발시작 (WPA21) 개발환경구축예제 - c:\wp7\wpa21 - 페이지호출 + 이전화면으로의복귀 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Canvas Height= 597 HorizontalAlignment= Left Margin= 10,10,0,0 Name= canvas1 VerticalAlignment= Top Width= 458 > <Button Canvas.Left= 140 Canvas.Top= 185 Content= Button Height= 72 Name= button1 Width= 160 Click= button1_click /> </Canvas> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Portrait Page > Page1.xaml 생성 > PageTitle 변경 (Sub Page) 74

WP7 개발시작 (WPA21) 75 -CS(MainPage.xaml.cs) 에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate(new Uri( /Page1.xaml, UriKind.Relative)); -XAML(Page1.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 72 HorizontalAlignment= Left Margin= 146,159,0,0 Name= button1 VerticalAlignment= Top Width= 160 Click= button1_click /> </Grid> -CS(Page1.xaml.cs) 에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) if(navigationservice.cangoback == true) NavigationService.GoBack(); //NavigationService.Navigate(new Uri( MainPage.xaml,UriKind.Relative));

WP7 개발시작 (WPA21) 참고사항 - NavigationService.CanGoBack 속성 : 후방탐색기록에하나이상의항목이있는지여부를나타내는값을가져옴 : 후방탐색기록에하나이상의항목이있는경우 true 그렇지않으면 false : GoBack() 메서드는후방탐색기록에항목이하나도없을경우 InvalidOperationException 예외를 throw 함. if(navigationservice.cangoback == true) NavigationService.GoBack(); 76

WP7 개발시작 (WPA22) 개발환경구축예제 - c:\wp7\wpa22 - 화면 ( 페이지 ) 정보알아보기 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Canvas Height= 577 HorizontalAlignment= Left Margin= 12,24,0,0 Name= canvas1 VerticalAlignment= Top Width= 438 > <Button Canvas.Left= 97 Canvas.Top= 149 Content= Button Height= 134 Name= button1 Width= 224 Click= button1_click /> </Canvas> </Grid> -CS(MainPage.xaml.cs) 에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) String struri = NavigationService.CurrentSource.ToString(); MessageBox.Show(strUri); 77

WP7 개발시작 (WPA22) 참고사항 - NavigationService.CurrentSource 속성 : 현재표시된컨텐츠의 URI(Uniform Resource Identifier) 를가져옴. - NavigationService.Navigate 메서드 : 지정된소스컨텐츠를비동기적으로탐색한다. : 새로운 XAML 페이지를화면에출력하는기능을한다. 78

WP7 개발시작 (WPA22Ext01) 개발환경구축예제 - c:\wp7\wpa22ext01 - 화면회전 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Name= button1 Content= Both Click= button1_click /> <Button Name= button2 Content= Portrait Click= button2_click /> <Button Name= button3 Content= Landscape Click= button3_click /> </StackPanel> </Grid> 79

WP7 개발시작 (WPA22Ext01) -CS(MainPage.xaml.cs) 에서의코드생성 private void button1_click(object sender, RoutedEventArgs e) //both this.supportedorientations = SupportedPageOrientation.PortraitOrLandscape; private void button2_click(object sender, RoutedEventArgs e) //portrait this.supportedorientations = SupportedPageOrientation.Portrait; private void button3_click(object sender, RoutedEventArgs e) //Landscape this.supportedorientations = SupportedPageOrientation.Landscape; this.orientation = PageOrientation.Landscape; 80

WP7 개발시작 (WPA23) 개발환경구축예제 - c:\wp7\wpa23 - 피벗페이지만들기 - 어플리케이션안에서뷰또는페이지들관리의편리함을제공 - 파노라마와의차이점은상단의타이틀이고정되면서여러개패널중에현재자신의것만활성화하여현재보고있는위치를알려줌. -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 149 HorizontalAlignment= Left Margin= 107,89,0,0 x:name= button1 VerticalAlignment= Top Width= 241 Click= button1_click /> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Pivot Application > PivotPage1.xaml 생성 81

WP7 개발시작 (WPA23) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate(new Uri( /PivotPage1.xaml,UriKind.Relative)); -XAML(PivotPage1.xaml) 에서코드생성 : Pivot 페이지형식 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage > <controls:pivotitem Header= item1 > </controls:pivotitem> <controls:pivotitem Header= item2 > </controls:pivotitem> <controls:pivot> </Grid> 82

WP7 개발시작 (WPA23) 83 -XAML(PivotPage1.xaml) 에서코드생성 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage > <controls:pivotitem Header= item1 > <Grid> <ListBox Height= 402 HorizontalAlignment= Left Margin= 10,10,0,0 Name= listbox1 VerticalAlignment= Top Width= 460 /> </Grid> </controls:pivotitem> <controls:pivotitem Header= item2 > <Grid> <ListBox Height= 402 HorizontalAlignment= Left Margin= 10,10,0,0 Name= listbox2 VerticalAlignment= Top Width= 460 /> </Grid> </controls:pivotitem> <controls:pivotitem Header= item3 > <Grid> <Button Content= Button Height= 229 VerticalAlignment= Top HorizontalAlignment= Center Name= button1 Width= 287 Click= button1_click /> </Grid> </controls:pivotitem> <controls:pivot> </Grid>

WP7 개발시작 (WPA23) -CS(PivotPage1.xaml.cs) 에서코드생성 public PivotPage1() InitializeComponent(); listbox1.items.add( 12345 ); listbox1.items.add( 12345 ); listbox1.items.add( 12345 ); listbox2.items.add( 12345 ); listbox2.items.add( 12345 ); listbox3.items.add( 12345 );. private void button1_click(object sender, RoutedEventArgs e) Uri uri = new Uri( /MainPage.xaml,UriKind.Relative); NavigationService.Navigate(uri); 84

WP7 개발시작 (WPA23Ext01) 개발환경구축예제 - c:\wp7\wpa23ext01 - Pivot 컨트롤의여러페이지중지정한페이지로바로가기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button x:name= button1 Content= PivotPage 로가기 Click= button1_click /> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Pivot Page > PivotPage1.xaml 생성 85

WP7 개발시작 (WPA07Ext01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate(new Uri( /PivotPage1.xaml,UriKind.Relative)); -XAML(PivotPage1.xaml) 에서코드생성 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage x:name= PivotItem1 > <controls:pivotitem Header= PivotItem1 > <Grid> <Button x:name= button2 Content= Pivot Item2 로가기 Click= button2_click /> </Grid> </controls:pivotitem> <controls:pivotitem Header= PivotItem2> <Grid> <ListBox x:name= listbox1 /> </Grid> </controls:pivotitem> <controls:pivot> </Grid> 86

WP7 개발시작 (WPA23Ext01) -CS(PivotPage1.xaml.cs) 에서코드생성 public PivotPage1() InitializeComponent(); listbox1.items.add( ABC ); listbox1.items.add( DEF ); listbox1.items.add( GHI ); private void button1_click(object sender, RoutedEventArgs e) PivotControl.SelectedItem = PivotControl.Items[1]; 87

WP7 개발시작 (WPA24) 개발환경구축예제 - c:\wp7\wpa24 - 파노라마페이지만들기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Panorama Page 로이동 x:name= button1 Click= button1_click /> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Panorama Page > PanoramaPage1.xaml 생성 88

WP7 개발시작 (WPA24) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) Uri uri = new Uri( /PanoramaPage1.xaml, UriKind.Relative); NavigationService.Navigate(uri); -XAML(PanoramaPage1.xaml) 에서코드생성 : Panorama Page 의배경이미지삽입 <Grid x:name= LayoutRoot > <controls:panorama Title= my application > <controls:panorama.background> <ImageBrush ImageSource= images/hydrangeas.jpg /> </controls:panorama.background> <controls:panorama> </Grid> : Solution Explorer 의 images 폴더에배경이미지를추가하는선행작업이필요함. 89

WP7 개발시작 (WPA25) 개발환경구축예제 - c:\wp7\wpa25 - 리스트활용 (1) : WPA23,WPA23Ext01 에서선보였던리스트응용 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <ListBox x:name= listbox1 /> </Grid> - CS(MainPage.xaml.cs) 에서코드생성 string[] strcolor = RED, YELLOW, GREEN, BLUE ; public MainPage() InitializeComponent(); listbox1.itemssource = strcolor; 90

WP7 개발시작 (WPA25) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) Uri uri = new Uri( /PanoramaPage1.xaml, UriKind.Relative); NavigationService.Navigate(uri); -XAML(PanoramaPage1.xaml) 에서코드생성 : Panorama Page 의배경이미지삽입 <Grid x:name= LayoutRoot > <controls:panorama Title= my application > <controls:panorama.background> <ImageBrush ImageSource= images/hydrangeas.jpg /> </controls:panorama.background> <controls:panorama> </Grid> : Solution Explorer 의 images 폴더에배경이미지를추가하는선행작업이필요함. 91

WP7 개발시작 (WPA26) 92 개발환경구축예제 - c:\wp7\wpa26 - 리스트활용 (2) : WPA23,WPA23Ext01 에서선보였던리스트응용 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <ListBox x:name= listbox1 SelectionChanged= listbox1_selectionchanged > <ListBox.ItemTemplate> <DataTemplate> <Border BorderBrush= Red BorderThickness= 2 Margin= 0,1 > <StackPanel> <TextBlock Text= Binding useritem1 /> <TextBlock Text= Binding useritem2 /> <TextBlock Text= Binding useritem3 /> </StackPanel> </Border> </DataTemplate> </ListBox.ItemTemplate> <ListBox.ItemContainerStyle> <Style TargetType= ListBoxItem > <Setter Property= HorizontalContentAlignment value= Stretch /> </Style> </ListBox.ItemContainerStyle> </ListBox> </Grid>

WP7 개발시작 (WPA26) -CS(MainPage.xaml.cs) 에서코드생성 // 클래스선언 public class userclass public string useritem1 get; set; public string useritem2 get; set; public string useritem3 get; set; public override string ToString() return useritem1 + / + useritem2 + / + useritem3; //userclass 객체생성 -> List 생성 List<userClass> listofuser = new List<userClass>() new userclass() useritem1= AAA, useritem2= 111, useritem3= aaa, new userclass() useritem1= BBB, useritem2= 222, useritem3= bbb, new userclass() useritem1= CCC, useritem2= 333, useritem3= ccc 93

WP7 개발시작 (WPA26) -CS(MainPage.xaml.cs) 에서코드생성 //MainPage() 생성자 public MainPage() InitializeComponent(); listbox1.itemssource = listofuser; private void listbox1_selectionchanged(object sender, SelectionChangedEventArgs e) int nsel = listbox1.selectedindex; userclass uc = (userclass)listbox1.items[nsel]; MessageBox.Show(uc.ToString()); 94

WP7 개발시작 (WPB01) 개발환경구축예제 - c:\wp7\wpb01 - IsolatedStorage( 격리저장소 ) -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel Orientation= Vertical > <Button Content= 쓰기 Name= button1 Click= button1_click /> <Button Content= 읽기 Name= button2 Click= button2_click /> <Button Content= 지우기 Name= button3 Click= button3_click /> </StackPanel> </Grid> -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼런스선언 using System.IO; using System.IO.IsolatedStorage; using System.Diagnostics; using System.Text; 95

WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 쓰기기능이벤트핸들러 private void button1_click(object sender, RoutedEventArgs e) // 쓰기 IsolatedStorageFile appstorage = null; //GetUser.. 독립된저장소정보가져옴 appstorage = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream file = null; // 독립된저장소의파일사용위해선언 file = appstorage.openfile( WPB01.txt, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); // 쓰기용도 file.seek(0,seekorigin.end); String strtext = 12345\r\n ; Encoding enc = Encoding.Unicode; // 윈도우폰에서는 Unicode만지원 Byte[] ctext = enc.getbytes(strtext); file.write(ctext, 0, ctext.length); file.close(); long lfree = appstorage.availablefreespace; Debug.WriteLine(lfree.ToString()); String[] files = appstorage.getfilenames(); foreach(string filename in files) Debug.WriteLine(filename); // 저장가능한여유공간 96

WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 읽기기능이벤트핸들러 private void button2_click(object sender, RoutedEventArgs e) // 읽기 IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream file = null; file = appstorage.openfile( WPB01.txt, FileMode.Open, FileAccess.Read, FileShare.None); file.seek(0,seekorigin.begin); Byte[] ctext = new Byte[file.Length]; for(int i=0; i < file.length; i++) ctext[i] = (Byte)file.ReadByte(); file.close(); Encoding enc = Encoding.Unicode; String strout = enc.getstring(ctext, 0, ctext.length); MessageBox.Show(strOut); 97

WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 지우기기능이벤트핸들러 private void button3_click(object sender, RoutedEventArgs e) // 지우기 IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.GetUserStoreForApplication(); appstorage.deletefile( WPB01.txt ); 98

WP7 개발시작 (WPB01) 참고사항 -IsolatedStorage( 격리저장소 ) 실버라이트에서부터제공실버라이트의 API 와동일한기능 Device 의 Flash Memory 에서제공하는만큼의용량지원 : 저장코드샘플 var appstorage = IsolatedStorageFile.GetUserStoreForApplication(); string filename= storefile.txt ; using(var file=appstorage.openfile(filename, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)) using(var writer = new StreamWriter(file)) writer.write(textbox1.text); 99

WP7 개발시작 (WPB01) 참고사항 -IsolatedStorage( 격리저장소 ) : 읽기코드샘플 using(isolatedstoragefile store = IsolatedStorageFile.GetUserStoreForApplication()) using(streamreader sr = new StreamReader(store.OpenFile( storefile.txt, FileMode.Open, FileAccess.Read))) textbox1.text = sr.readtoend(); 100

WP7 개발시작 (WPB01Ext01) 개발환경구축예제 - c:\wp7\wpb01ext01 - TextBox 의데이터를입력해서 IsolatedStorage( 격리저장소 ) 에저장및저장된파일읽어오기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBox x:name= textbox1 Width= 480 Height= 263 TextWrapping= Wrap AcceptsReturn= true /> <StackPanel Orientation= Horizontal HorizontalAlignment= Center > <Button x:name= button1 Content= 저장 Click= button1_click /> <Button x:name= button2 Content= 지우기 Click= button2_click /> <Button x:name= button3 Content= 읽기 Click= button3_click /> </StackPanel> </StackPanel> </Grid> 101

WP7 개발시작 (WPB01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼런스선언 using System.IO; using System.IO.IsolatedStorage; : 쓰기기능이벤트핸들러 private void button1_click(object sender, RoutedEventArgs e) IsolatedStorageFile appstorage = IsolatedStorageFile.GetUserStoreForApplication(); string filename = storefile.txt ; using(isolatedstoragefilestream file = appstorage.openfile(filename, FileMode.OpenOrCreate, FileAccess.Write)) using(streamwriter writer = new StreamWriter(file)) writer.write(textbox1.text); 102

WP7 개발시작 (WPB01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 : 텍스트박스의내용지우기 private void button2_click(object sender, RoutedEventArgs e) textbox1.text = String.Empty; : 읽기기능이벤트핸들러 private void button3_click(object sender, RoutedEventArgs e) // 읽기 using(isolatedstoragefile appstorage = IsolatedStorageFile.GetUserStoreForApplication()) using(streamreader reader = new StreamReader(appStorage.OpenFile( storefile.txt,filemode.open, FileAccess.Read))) textbox1.text = reader.readtoend(); 103

WP7 개발시작 (WPB01Ext02) 104 개발환경구축예제 - c:\wp7\wpb01ext02 - IsolatedStoreage 에저장된파일목록보기및할당량, 남은공간정보 -XAML(MainPage.xaml) 에서코드생성 <phone:phoneapplicationpage Loaded= PhoneApplicationPage_Loaded > <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel Orientation= Vertical > <ListBox x:name= listbox1 Height= 250 > <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation= Horizontal > <TextBlock Text= Binding /> <HyperlinkButton x:name= hyperlinkbutton1 Content= Binding Click= hyperlinkbutton1_click /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <TextBlock x:name= textblock1 Text= 할당량은? FontSize= 30 /> <TextBlock x:name= textblock2 Text= 남은공간은? FontSize= 30 /> <Button x:name= button1 Content= 파일목록보기 Click= button1_click /> </StackPanel> </Grid>

WP7 개발시작 (WPB01Ext02) -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Portrait Page > Page1.xaml 생성 -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼런스선언 using System.IO; using System.IO.IsolatedStorage; 105

WP7 개발시작 (WPB01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 : 페이지가로드되었을때정보보여주기 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) DisplayInfo(); private void DisplayInfo() using(var isf = IsolatedStorageFile.GetUserStoreForApplication()) listbox1.itemssource = isf.getfilenames(); textblock1.text = String.Format( 할당량은? 0,isf.Quota); // 격리된저장소에서사용할수있는공간의최대크기값 textblock2.text = String.Format( 남은공간은? 0, isf.availablefreespace); // 격리된저장소의사용가능한공간을나타내는값 106

WP7 개발시작 (WPB01Ext02) 107 -CS(MainPage.xaml.cs) 에서코드생성 : 파일목록보기버튼클릭시임의의파일이생성되고정보보여주기 private void button1_click(object sender, RoutedEventArgs e) CreateFile( StoreFile1.txt, 첫번째샘플파일 ); CreateFile( StoreFile2.txt, 두번째샘플파일 ); CreateFile( StoreFile3.txt, 세번째샘플파일 ); DisplayInfo(); private void CreateFile(string filename, string filecontent) using(var isf = IsolatedStorageFile.GetUserStoreForApplication()) if(!isf.fileexists(filename)) using(var file = isf.createfile(filename)) using(streamwriter sw = new StreamWriter(file)) sw.writeline(filecontent);

WP7 개발시작 (WPB01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 : 파일목록에서하나의파일클릭시 Page1.xaml 에정보표시 private void hyperlinkbutton1_click(object sender, RoutedEventArgs e) var hyperlink = sender as HyperlinkButton; string filename = hyperlink.content.tostring(); string uri = String.Format( /Page1.xaml?FileName=0,fileName); 108

WP7 개발시작 (WPB01Ext02) -XAML(Page1.xaml) 에서코드생성 <Grid x:name= ContentPanel Grid.Row= 1 Margin= 12,0,12,0 > <StackPanel> <TextBlock x:name= textblock1 /> <TextBlock x:name= textblock2 /> <HyperlinkButton x:name= hyperlinkbutton1 Content= 메인화면으로이동 NavigateUri= /MainPage.xaml /> </StackPanel> </Grid> 109

WP7 개발시작 (WPB01Ext02) 110 -CS(Page1.xaml.cs) 에서코드생성 (using System.IO, using System.IO.IsolatedStorage) public Page1() InitializeComponent(); this.loaded+=new RoutedEventHandler(Page1_Loaded); void Page1_Loaded(object sender, RoutedEventArgs e) if(navigationcontext.querystring[ FileName ]!= null) textblock1.text = NavigationContext.QueryString[ FileName ]; using(var isf=isolatedstoragefile.getuserstoreforapplication()) using(streamreader reader = new StreamReader( isf.openfile(textblock1.text, FileMode.Open, FileAccess.Read))) // 현재위치에서끝까지스트림을읽는다. textblock2.text = reader.readtoend();

WP7 개발시작 (WPB03) 개발환경구축예제 - c:\wp7\wpb03 - 폴더생성및삭제 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBox Name= textbox1 Text= TextBox /> <Button Content= 폴더생성 Name= button1 Click= button1_click /> <Button Content= 폴더삭제 Name= button2 Click= button2_click /> <TextBlock Name= textblock1 Text= TextBlock /> </StackPanel> </Grid> 111

WP7 개발시작 (WPB03) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() InitializeComponent(); FolderInfo(); private void FolderInfo() IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.getUserStoreForApplication(); string[] folder = appstorage.getdirectorynames(); string stroutput = ; foreach(string foldername in folder) stroutput += foldername + \n ; textblock1.text = stroutput; 112

WP7 개발시작 (WPB03) -CS(MainPage.xaml.cs) 에서코드생성 : 폴더생성버튼클릭시 private void button1_click(object sender, RoutedEventArgs e) CreateFolder(textBox1.Text); FolderInfo(); private void CreateFolder(string strpath) IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.getUserStoreForApplication(); if(appstorage.dirctoryexists(strpath) == true) MessageBox.Show( 해당폴더가존재합니다. ); return; appstorage.createdirectory(strpath); // 격리된저장소범위내에디렉토리생성 113

WP7 개발시작 (WPB03) -CS(MainPage.xaml.cs) 에서코드생성 : 폴더삭제버튼클릭시 private void button2_click(object sender, RoutedEventArgs e) DeleteFolder(textBox1.Text); FolderInfo(); private void DeleteFolder(string strpath) IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.getUserStoreForApplication(); if(appstorage.dirctoryexists(strpath) == false) MessageBox.Show( 해당폴더가존재하지않습니다. ); return; appstorage.deletedirectory(strpath); // 격리저장소범위내에있는디렉토리삭제 114

WP7 개발시작 (WPB04) 개발환경구축예제 - c:\wp7\wpb04 - 설정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBox Name= textbox1 Text= TextBox /> <Button Content= 설정저장 Name= button1 Click= button1_click /> <Button Content= 설정읽기 Name= button2 Click= button2_click /> <Button Content= 설정삭제 Name= button3 Click= button3_click /> <TextBlock Name= textblock1 Text= Class 활용 /> <Button Content= 설정저장 Name= button4 Click= button4_click /> <Button Content= 설정읽기 Name= button5 Click= button5_click /> </StackPanel> </Grid> 115

WP7 개발시작 (WPB04) -CS(MainPage.xaml.cs) 에서코드생성 using System.IO.Isolated; String m_strkey = mkey ; private void button1_click(object sender, RoutedEventArgs e) // 설정저장 if(isolatedstoragesettings.applicationsettings.contains(m)strkey)==true) IsolatedStorageSettings.ApplicationSettings[m_strKey] = textbox1.text; else IsolatedStorageSettings.ApplicationSettings.Add(m_strKey,textBox1.Text); IsolatedStorageSettings.ApplicationSettings.Save(); 116

WP7 개발시작 (WPB04) 117 -CS(MainPage.xaml.cs) 에서코드생성 private void button2_click(object sender, RoutedEventArgs e) // 설정읽기 String strdata = : if(isolatedstoragesettings.applicationsettings.contains(m_strkey)==true) strdata = IsolatedStorageSettings.ApplicationSettings[m_strKey] as String; else strdata = 저장된내역이없습니다. ; MessageBox.Show(strData); private void button3_click(object sender, RoutedEventArgs e) // 설정삭제 if(isolatedstoragesettings.applicationsettings.contains(m_strkey)==true) IsolatedStorageSettings.ApplicationSettings.Remove(m_strKey);

WP7 개발시작 (WPB04) -CS(MainPage.xaml.cs) 에서코드생성 public class Mdata public string mtext get; set; public long mlong get; set; private void button4_click(object sender, RoutedEventArgs e) // 설정저장 MData m = new Mdata(); m.mtext = 문자열입니다. ; m.mlong = 999; if(isolatedstoragesettings.applicationsettings.contains(m_strkey)==true) IsolatedStorageSettings.ApplicationSettings.Remove(m_strKey); IsolatedStorageSettings.ApplicationSettings.Add(m_strKey, m); IsolatedStorageSettings.ApplicationSettings.Save(); 118

WP7 개발시작 (WPB04) -CS(MainPage.xaml.cs) 에서코드생성 private void button5_click(object sender, RoutedEventArgs e) String strdata = ; if(isolatedstoragesettings.applicationsettings.contains(m_strkey)==true) MData m = IsolatedStorageSettings.ApplicationSettings[m_strKey] as Mdata; strdata = m.mtext + \n + m.mlong.tostring(); else strdata = 지정된내역이없습니다. ; MessageBox.Show(strData); 119

WP7 개발시작 (WPD01) 개발환경구축예제 - c:\wp7\wpd01 - 테마색상활용 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Name= button1 Click= button1_click > </Grid> 120

WP7 개발시작 (WPD01) -CS(MainPage.xaml.cs) 에서코드생성 private void FolderInfo() Color themefore = (Color)Application.Current.Resources[ PhoneForegroundColor ]; Color themeback = (Color)Application.Current.Resources[ PhoneBackgroundColor ]; Color themeaccent = (Color)Application.Current.Resources[ PhoneAccentColor ]; PageTitle.Foreground = new SolidColorBrush(themeFore); ApplicationTitle.Foreground = new SolidColorBrush(themeAccent); TitlePanel.Background = new SolidColorBrush(themeFore); LayoutRoot.Background = new SolidColorBrush(themeAccent); 121

WP7 개발시작 (WPD01) 참고사항 - 테마색상정보 BLUE[ARGB 값 ] : #FF1BA1E2 / ORANGE[ARGB 값 ] : #FFF09609 GREEN[ARGB 값 ] : #FF339933 / RED[ARGB 값 ] : #FFE51400 PURPLE[ARGB 값 ] : #FFA200FF / BROWN[ARGB 값 ] : #FFA05000 TEAL[ARGB 값 ] : #FF00ABA9 / PINK[ARGB 값 ] : #FFE671B8 LIME[ARGB 값 ] : #FF8CBF26 / MAGENTA[ARGB 값 ] : #FFFF0097 122

WP7 개발시작 (WPD02) 개발환경구축예제 - c:\wp7\wpd02 - 외부폰트사용하기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Name= button1 Click= button1_click Height= 103 VerticalAlignment= Center HorizontalAlignment= Center Width= 300 /> <TextBlock Text= 테스트 12345 ABC Name= textblock1 Height= 192 VerticalAlignment= Top HorizontalAlignment= Left Width= 450 /> </Grid> - 폰트파일을프로젝트에추가하기 Windows\Fonts 의지정폰트를프로젝트에복사하기 Build Action : Content Copy to Output Directory : Copy always 123

WP7 개발시작 (WPD02) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) StreamResourceInfo fontresourceinfo = Application.GetResourceStream( new Uri( MYRIADPRO-REGULAR.OTF,UriKind.Relative)); FontSource fontsource = new FontSource(fontResourceInfo.Stream); textblock1.fontsource = fontsource; textblock1.fontfamily = new FontFamily( Myriad Pro ); textblock1.fontsize = 30; texxtblock1.fontweight = FontWeights.Bold; PageTitle.FontSource = fontsource; PageTitle.FontFamily = new FontFamily( Myriad Pro ); PageTitle.FontStyle = FontStyles.Italic; 124

WP7 개발시작 (WPD03) 개발환경구축예제 - c:\wp7\wpd03 - 타일 (Tile) Icon -Background.jpg 와 ApplicationIcon.jpg Background.jpg : 메인화면의타일에설정됨. 가로세로 173pixel ApplicationIcon.jpg : 프로그램목록의아이콘. 가로세로 63pixel - 프로젝트 > 속성프로젝트 > 속성 > Application > Deployment options Area - Pin to Start 타일로프로그램을옮기거나제거 125

WP7 개발시작 (WPC01Ext01) 개발환경구축예제 - c:\wp7\wpc01ext01 - XAML 에서앱바 (ApplicationBar) 만들기 -XAML(MainPage.xaml) 에서코드생성 <phone:phoneapplicationpage.applicationbar> <shell:applicationbar IsVisible= True IsMenuEnabled= True > </shell:applicationbar> </phone:phoneapplicationpage.applicationbar> 부분의주석해제 - 아이콘파일을프로젝트에추가하기프로젝트내에 images 폴더를생성하고 C:\Program Files\ Microsoft SDKs\Windows Phone\v7.1\Icons\dark 내의임의의파일을 images 폴더내에복사이미지속성 Build Action : Content Copy to Output Directory : Copy always - 이벤트핸들러생성 126

WP7 개발시작 (WPC01) 개발환경구축예제 - c:\wp7\wpc01 - 앱바 (ApplicationBar) 만들기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 607 Name= button1 Width= 450 Click= button1_click /> </Grid> - 아이콘파일을프로젝트에추가하기프로젝트내에 icon 폴더를생성하고 C:\Program Files\ Microsoft SDKs\Windows Phone\v7.1\Icons\dark 내의임의의파일을 icon 폴더내에복사이미지속성 Build Action : Content Copy to Output Directory : Copy always 127

WP7 개발시작 (WPC01) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Shell; public MainPage() //MainPage() 생성자시작 InitializeComponent(); this.supportedorientations = SupportedPageOrientation.PortraitOrLandscape; ApplicationBar = new ApplicationBar(); ApplicationBar.IsMenuEnabled = true; ApplicationBar.IsVisible = true; ApplicationBarIconButton baritem1 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.email.rest.png,urikind.relative) ); baritem1.text= 아이템 1 ; baritem1.click += new EventHangler(baritem1_Click); 128

WP7 개발시작 (WPC01) -CS(MainPage.xaml.cs) 에서코드생성 //MainPage() 생성자계속 ApplicationBarIconButton baritem2 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.video.rest.png,urikind.relative) ); baritem2.text= 아이템 2 ; baritem2.click += new EventHangler(baritem2_Click); ApplicationBarIconButton baritem3 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.sync.rest.png,urikind.relative) ); baritem3.text= 아이템 3 ; baritem3.click += new EventHangler(baritem3_Click); ApplicationBar.Buttons.Add(baritem1); ApplicationBar.Buttons.Add(baritem2); ApplicationBar.Buttons.Add(baritem3); //MainPage() 생성자계속 129

WP7 개발시작 (WPC01) -CS(MainPage.xaml.cs) 에서코드생성 //MainPage() 생성자계속 ApplicationBarMenuItem menuitem1 = new ApplicationBarMenuItem( 메뉴바 1 ); menuitem1.click += new EventHandler(menuitem1_Click); ApplicationBarMenuItem menuitem2 = new ApplicationBarMenuItem( 메뉴바 2 ); menuitem2.click += new EventHandler(menuitem2_Click); ApplicationBar.MenuItems.Add(menuitem1); ApplicationBar.MenuItems.Add(menuitem2); //MainPage생성자끝 // 각각의이벤트핸들러는 MessageBox.Show() 이용 void menuitem1_click(object sender, EventArgs e) MessageBox.Show( menuitem1click ); 130

WP7 개발시작 (WPC01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) ApplicationBar.IsMenuEnabled = false; ApplicationBar.IsVisible = true; ApplicationBar.Opacity = 0.5; 131

WP7 개발시작 (WPC01) 참고사항 -ApplicationBar 의최대아이콘개수최대 4 개까지만지원한다. -UIElement 의 Opacity : UIElement 의투명도를나타내는값불투명도인수를선언하는 0 부터 1.0 사이의값 1.0 은완전불투명 ( 기본값 ), 0 은투명 132

WP7 개발시작 (WPC02) 개발환경구축예제 - c:\wp7\wpc02 - 앱바 (ApplicationBar) 꾸미기 ( 색상변경 ) WPC01 예제참조 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 607 Name= button1 Width= 450 Click= button1_click /> </Grid> - 아이콘파일을프로젝트에추가하기프로젝트내에 icon 폴더를생성하고 C:\Program Files\ Microsoft SDKs\Windows Phone\v7.1\Icons\dark 내의임의의파일을 icon 폴더내에복사이미지속성 Build Action : Content Copy to Output Directory : Copy always 133

WP7 개발시작 (WPC02) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Shell; public MainPage() //MainPage() 생성자시작 InitializeComponent(); this.supportedorientations = SupportedPageOrientation.PortraitOrLandscape; ApplicationBar = new ApplicationBar(); ApplicationBar.IsMenuEnabled = true; ApplicationBar.IsVisible = true; ApplicationBarIconButton baritem1 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.email.rest.png,urikind.relative) ); baritem1.text= 아이템 1 ; baritem1.click += new EventHangler(baritem1_Click); 134

WP7 개발시작 (WPC02) -CS(MainPage.xaml.cs) 에서코드생성 //MainPage() 생성자계속 ApplicationBarIconButton baritem2 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.video.rest.png,urikind.relative) ); baritem2.text= 아이템 2 ; baritem2.click += new EventHangler(baritem2_Click); ApplicationBarIconButton baritem3 = new ApplicationBarIconButton( new Uri( icon/appbar.feature.sync.rest.png,urikind.relative) ); baritem3.text= 아이템 3 ; baritem3.click += new EventHangler(baritem3_Click); ApplicationBar.Buttons.Add(baritem1); ApplicationBar.Buttons.Add(baritem2); ApplicationBar.Buttons.Add(baritem3); //MainPage() 생성자계속 135

WP7 개발시작 (WPC02) -CS(MainPage.xaml.cs) 에서코드생성 //MainPage() 생성자계속 ApplicationBarMenuItem menuitem1 = new ApplicationBarMenuItem( 메뉴바 1 ); menuitem1.click += new EventHandler(menuitem1_Click); ApplicationBarMenuItem menuitem2 = new ApplicationBarMenuItem( 메뉴바 2 ); menuitem2.click += new EventHandler(menuitem2_Click); ApplicationBar.MenuItems.Add(menuitem1); ApplicationBar.MenuItems.Add(menuitem2); //MainPage생성자끝 // 각각의이벤트핸들러는 MessageBox.Show() 이용 void menuitem1_click(object sender, EventArgs e) MessageBox.Show( menuitem1click ); 136

WP7 개발시작 (WPC02) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) ApplicationBar.IsMenuEnabled = false; ApplicationBar.IsVisible = true; ApplicationBar.Opacity = 0.5; ApplicationBar.ForegroundColor = (Color)Application.Current.Resources[ PhoneAccentColor ]; ApplicationBar.BackgroundColor = Color.FromArgb(255,125,125,125); 137

WP7 개발시작 (WPC03) 개발환경구축예제 - c:\wp7\wpc03 - SystemTray -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 103 HorizontalAlignment= Left Name= button1 Margin= 120,64,0,0 Width= 219 VerticalAlignment= Top Click= button1_click /> </Grid> - 아이콘파일을프로젝트에추가하기프로젝트내에 icon 폴더를생성하고 C:\Program Files\ Microsoft SDKs\Windows Phone\v7.1\Icons\dark 내의임의의파일을 icon 폴더내에복사이미지속성 Build Action : Content Copy to Output Directory : Copy always 138

WP7 개발시작 (WPC03) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Shell; private void button1_click(object sender, RoutedEventArgs e) if(systemtray.isvisible == true) SystemTray.IsVisible = false; else SystemTray.IsVisible = true; 139

WP7 개발시작 (WPE01) 개발환경구축예제 - c:\wp7\wpe01 - GPS(Global Positioning System) 을이용한위치측정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <my:map Height= 515 HorizontalAlignment= Left Margin= 13,86,0,0 Name= map1 VerticalAlignment= Top Width= 437 /> <Button Content= GPS Height= 72 HorizontalAlignment= Left Margin= 10,10,0,0 Name= button1 Width= 440 VerticalAlignment= Top Click= button1_click /> </Grid> -Reference 추가 Map 컨트롤을사용하려면프로젝트내에 Microsoft.Phone.Controls.Maps 레퍼런스를추가 xmlns:my= clr-namespace:microsoft.phone.controls.maps; assembly=microsoft.phone.controls.maps 추가간단하게는 Toolbox 에서 Map 컨트롤을직접생성하면자동추가됨. 140

WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 using System.Device.Location; using Microsoft.Phone.Controls.Maps; // 전역변수선언 GeoCoordinateWatcher watcher = null; double m_dblatitude = 0; double m_dblongitude = 0; // 위치정보를가져오는개체 // 위도 // 경도 141

WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) if(watcher==null) watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); watcher.statuschanged+= new EventHandler<GeoPositionStatusChangedEventArgs> (watcher_statuschanged); watcher.positionchanged+= new EventHandler<GeoPositionChangedEventArgs <GeoCoordinate>>(watcher_PositionChanged); watcher.start(); map1.zoomlevel = 15; map1.mode = new RoadMode(); map1.center = new GeoCoordinate(m_dbLatitude, m_dblongitude); map1.zoombarvisibility = Visibility.Visible; // button1_click 내용계속 142

WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 // button1_click 내용계속 String strlatitude = 위도 : + m_dblatitude.tostring( 0.000 ); String strlongitude = 경도 : + m_dblongitude.tostring( 0.000 ); ApplicationTitle.Text = strlatitude + / + strlongitude; void watcher_positionchanged(object sender, GeoPositionChagedEventArgs<GeoCoordinate> e) m_dblatitude = e.position.location.latitude; m_dblongitude = e.position.location.longitude; 143

WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_statuschanged(object sender, GeoPositionStatusChangedEventArgs e) String strmsg = ; switch(e.status) case GeoPositionStatus.Disabled: strmsg = GPS 미지원 ; break; case GeoPositionStatus.Initializing: strmsg = GPS 초기화중 ;break; case GeoPositionStatus.NoData: strmsg = GPS 작동중 - 데이터 X ; break; case GeoPositionStatus.Ready: strmsg = GPS 작동중 ; break; PageTitle.Text = strmsg; 144

WP7 개발시작 (WPE01Ext01) 개발환경구축예제 - c:\wp7\wpe01ext01 - 구글맵을이용한 GPS(Global Positioning System) 을이용한위치측정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Image Name= staticmap Width= 430 Height= 550 /> </Grid> -Reference 추가 System.Device 추가 145

WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 using System.Device.Location; using System.Windows.Threading; using System.Windows.Media.Imaging; // 전역변수선언 short ticks = 0; short nowticks = 0; int timer1 = 0; 146

WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.interval = TimeSpan.FromSecond(3); timer.tick += new EventHandler(timer_Tick); timer.start(); GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(); watcher.positionchanged += new EventHandler <GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged); watcher.start(); void timer_tick(object sender, EventArgs e) ticks++; timer1++; 147

WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_positionchanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) if(nowticks == 0) nowticks = ticks; ApplicationTitle.Text = string.format( 0:#.### / 1:#.####, e.position.location.latitude, e.position.location.longitude); if(timer1 % 2 == 0) string struri = string.format( http://maps.google.com/maps/api/staticmap?center=0,1&zoom=12&size =2x3&sensor=false, e.position.location.latitude, e.position.location.longitude, staticmap.width, staticmap.height); staticmap.source = new BitmapImage(new Uri(strUri,Urikind.Absolute)); nowticks = ticks = 0; 148

WP7 개발시작 (WPE01Ext02) 개발환경구축예제 - c:\wp7\wpe01ext02 - GPS 의위치정보를맵에뿌려주기. ZoomIn, ZoomOut, Mode 설정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <StackPanel Orientation="Horizontal > <Button Name="button1" Content="GPS" Click="button1_Click /> <ToggleButton Name="togglebutton1" Content="Road Mode" Click="togglebutton1_Click" Width="230"/> </StackPanel> <my:map Height="450" Name="map1" Width="442" /> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center > <Button Name="button2" Content="Zoom In" Click="button2_Click"/> <Button Name="button3" Content="Zoom Out" Click="button3_Click"/> </StackPanel> </StackPanel> </Grid> 149

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 using System.Device.Location; using Microsoft.Phone.Controls.Maps; using System.Windows.Controls.Primitives; // 전역변수선언 GeoCoordinateWatcher watcher = null; double m_dblatitude = 0; // 위도 double m_dblongitude = 0; // 경도 //ToggleButton // 위치정보를가져오는개체 150

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) if(watcher==null) watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); watcher.movementthreshold = 20; var position = watcher.position; if(!position.location.isunknown) m_dblatitude = position.location.latitude; m_dblongitude = position.location.longitude; // button1_click 내용계속 151

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 //button1_click 내용계속 watcher.statuschanged+= new EventHandler<GeoPositionStatusChangedEventArgs> (watcher_statuschanged); watcher.positionchanged+= new EventHandler<GeoPositionChangedEventArgs <GeoCoordinate>>(watcher_PositionChanged); watcher.start(); map1.zoomlevel = 5; map1.mode = new RoadMode(); map1.center = new GeoCoordinate(m_dbLatitude, m_dblongitude); map1.zoombarvisibility = Visibility.Collapsed; String strlatitude = 위도 : + m_dblatitude.tostring( 0.000 ); String strlongitude = 경도 : + m_dblongitude.tostring( 0.000 ); PageTitle.Text = strlatitude + / + strlongitude; 152

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_positionchanged(object sender, GeoPositionChagedEventArgs<GeoCoordinate> e) m_dblatitude = e.position.location.latitude; m_dblongitude = e.position.location.longitude; 153

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_statuschanged(object sender, GeoPositionStatusChangedEventArgs e) String strmsg = ; switch(e.status) case GeoPositionStatus.Disabled: strmsg = GPS 미지원 ; break; case GeoPositionStatus.Initializing: strmsg = GPS 초기화중 ;break; case GeoPositionStatus.NoData: strmsg = GPS 작동중 - 데이터 X ; break; case GeoPositionStatus.Ready: strmsg = GPS 작동중 ; break; PageTitle.Text = strmsg; 154

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 private void togglebutton1_click(object sender, RoutedEventArgs e) ToggleButton togbtn = sender as ToggleButton; if(togbtn.ischecked.value) togbtn.content= Aerial Mode ; map1.mode = new AerialMode(); else togbtn.content= Road Mode ; map1.mode = new RoadMode(); // 항공촬영모드 // 도로 155

WP7 개발시작 (WPE01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 private void button2_click(object sender, RoutedEventArgs e) //Zoom In double zoom; zoom = map1.zoomlevel; map1.zoomlevel = ++zoom; private void button3_click(object sender, RoutedEventArgs e) //Zoom Out double zoom; zoom = map1.zoomlevel; map1.zoomlevel = --zoom; 156

WP7 개발시작 (WPE02) 개발환경구축예제 - c:\wp7\wpe02 - 진동 (Vibration) -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Name= button1 Content= Start Vibration Click= button1_click /> <Button Name= button2 Content= Stop Vibration Click= button2_click /> </StackPanel> </Grid> 157

WP7 개발시작 (WPE02) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Devices; private void button1_click(object sender, RoutedEventArgs e) VibrateController.Default.Start(TimeSpan.FromSeconds(5)); button1.isenabled = false; button2.isenabled = true; //5 초진동 private void button2_click(object sender, RoutedEventArgs e) VibrateController.Default.Stop(); button2.isenabled = false; button1.isenabled = true; 158

WP7 개발시작 (WPE03) 개발환경구축예제 - c:\wp7\wpe03 - 가속도계 (Accelerometer) 센서를이용한값 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Canvas Name= canvas1 > <Ellipse Name= ellipse1 Height= 40 Width= 40 > <Ellipse.Fill> <RadialGradientBrush> <GradientStop Color= Black Offset= 1 /> <GradientStop Color= #FFE4C017 /> <GradientStop Color= #FF851212 Offset= 0.5 /> </RadialGradientBrush> </Ellipse.Fill> </Ellipse> </Canvas> </Grid> 159

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Devices.Sensors; Accelerometer accelerometer = null; public MainPage() InitializeComponent(); accelerometer = new Accelerometer(); this.loaded += new RoutedEventHandler(MainPage_Loaded); void MainPage_Loaded(object sender, RoutedEventArgs e) accelerometer.readingchanged += new EventHandler<AccelerometerReadingEventArgs> (accelerometer_readingchanged); 160

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 void accelerometer_readingchanged(object sender, AccelerometerReadingEventArgs e) Deployment.Current.Dispatcher.BeginInvoke(() => MyReadingChaged(e)); Dispatcher Class 는현재 UI 를기반으로하지않는스레드의사용자인터페이스에서만실행코드를지원함. DependencyObject.Dispatcher 및 ScriptObject.Dispatcher 속성을통해 UI 스레드의 Dispatcher 개체를액세스할수있다. 이들은인스턴스메서드이지만이러한형식의인스턴스는 UI 를기반으로하지않는스레드에서액세스할수없는경우가종종있다. 이럴때응용프로그램의 Deployment 개체는 DependencyObject 이고이개체는 Current 속성을통해모든스레드에서사용할수있다. 호출자가 UI 스레드에없을경우 BeginInvoke 를호출하여지정된대리자를 UI 스레드에서실행할수있다. UI 스레드가아닌곳에서 UI 스레드의메시지큐에메시지를보내게된다. 161

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 private void MyReadingChanged(AccelerometerReadingEventArgs e) PageTitle.Text = String.Format( X:0 / Y:1 / Z:2, e.x, e.y, e.z); protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) accelerometer.start(); protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) accelerometer.stop(); 162

WP7 개발시작 (WPE03) 163 개발환경구축예제 - c:\wp7\wpe03.. 추가 - 가속도계 (Accelerometer) 센서를이용한값 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Canvas Name= canvas1 Width= 400 Height= 400 > <Ellipse Name= ellipse1 Height= 40 Width= 40 > <Ellipse.Fill> <RadialGradientBrush> <GradientStop Color= Black Offset= 1 /> <GradientStop Color= #FFE4C017 /> <GradientStop Color= #FF851212 Offset= 0.5 /> </RadialGradientBrush> </Ellipse.Fill> <Ellipse.RenderTransform> <TransformGroup> <translatetransform/> </TransformGroup> </Ellipse.RenderTransform> </Ellipse> </Canvas> </Grid>

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Devices.Sensors; private Accelerometer accelerometer; public MainPage() InitializeComponent(); accelerometer = new Accelerometer(); this.loaded += new RoutedEventHandler(MainPage_Loaded); void MainPage_Loaded(object sender, RoutedEventArgs e) accelerometer.readingchanged += new EventHandler<AccelerometerReadingEventArgs> (accelerometer_readingchanged); 164

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 void accelerometer_readingchanged(object sender, AccelerometerReadingEventArgs e) Deployment.Current.Dispatcher.BeginInvoke(() => MyReadingChaged(e)); double m_dbx=0; double m_dby=0; double m_dbz=0; 165

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 private void MyReadingChanged(AccelerometerReadingEventArgs e) PageTitle.Text = String.Format( X:0 / Y:1 / Z:2, e.x, e.y, e.z); TransformGroup tg = (TransformGroup)ellipse1.RenderTransform; TranslateTransform tt = (TranslateTransform)tg.Children[0]; double dbdeltax = m_dbx e.x; double dbdeltay = m_dby e.y; double dbdeltaz = m_dbz e.z; if(tt.x >=0 && tt.x <= canvas1.width) tt.x = tt.x dbdeltax * 4; if(tt.x < 0) tt.x = 0; if(tt.x > canvas1.width) tt.x = canvas1.width; if(tt.y >=0 && tt.y <= canvas1.height) tt.y = tt.y dbdeltaz * 4; if(tt.y < 0) tt.y = 0; if(tt.y > canvas1.height) tt.y = canvas1.height; 166

WP7 개발시작 (WPE03) -CS(MainPage.xaml.cs) 에서코드생성 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) accelerometer.start(); protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) accelerometer.stop(); 167

WP7 개발시작 (WPE03Ext01) 개발환경구축예제 - c:\wp7\wpe03ext01 - 가속도계 (Accelerometer) 센서를이용한값 (2) -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Name= button1 Content= Accelerometer Click= button1_click /> </Grid> -XAML 파일추가생성 Solution Explorer > Add > New Item > Windows Phone Portrait Page > Page1.xaml 생성 168

WP7 개발시작 (WPE03Ext01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate( new Uri( /Page1.xaml, UriKind.Relative)); 169

WP7 개발시작 (WPE03Ext01) -XAML(Page1.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content="Start" Height="72" HorizontalAlignment="Left" Margin="10,10,0,0" Name="startButton VerticalAlignment="Top" Width="160 Click="startButton_Click" /> <Button Content="Stop" Height="72" HorizontalAlignment="Right" Margin="0,10,10,0" Name="stopButton VerticalAlignment="Top" Width="160 Click="stopButton_Click"/> <TextBlock Height="30" HorizontalAlignment="Left" Margin="20,100,0,0" Name="xTextBlock" Text="X: 1.0" VerticalAlignment="Top" Foreground="Red" FontSize="28" FontWeight="Bold"/> <TextBlock Height="30" HorizontalAlignment="Center" Margin="0,100,0,0" Name="yTextBlock" Text="Y: 1.0" VerticalAlignment="Top" Foreground="Green" FontSize="28" FontWeight="Bold"/> <TextBlock Height="30" HorizontalAlignment="Right" Margin="0,100,20,0" Name="zTextBlock" Text="Z: 1.0" VerticalAlignment="Top" Foreground="Blue" FontSize="28" FontWeight="Bold"/> 170

WP7 개발시작 (WPE03Ext01) -XAML(Page1.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > //Grid 내계속 <Line x:name="xline" X1="240" Y1="350" X2="340" Y2="350" Stroke="Red" StrokeThickness="4"></Line> <Line x:name="yline" X1="240" Y1="350" X2="240" Y2="270" Stroke="Green" StrokeThickness="4"></Line> <Line x:name="zline" X1="240" Y1="350" X2="190" Y2="400" Stroke="Blue" StrokeThickness="4"></Line> <TextBlock Height="30" HorizontalAlignment="Center" Margin="6,571,6,0" Name="statusTextBlock" Text="TextBlock" VerticalAlignment="Top" Width="444 /> </Grid> 171

WP7 개발시작 (WPE03Ext01) -CS(Page1.xaml.cs) 에서코드생성 using Microsoft.Devices.Sensors; using Microsoft.Xna.Framework; Accelerometer accelerometer; Public Page1() InitializeComponent(); if(!accelerometer.issupported) statustextblock.text = Device does not support accelerometer ; startbutton.isenabled = false; stopbutton.isenabed = false; 172

WP7 개발시작 (WPE03Ext01) -CS(Page1.xaml.cs) 에서코드생성 private void startbutton_click(object sender, RoutedEventArgs e) if(accelerometer == null) accelerometer = new Accelerometer(); accelerometer.timebetweenupdates = TimeSpan.FromMilliseconds(20); accelerometer.currentvaluechanged += new EventHandler<sensorReadingEventArgs <AccelerometerReader>>(accelerometer_CurrentValueChanged); try accelerometer.start(); statustextblock.text = starting accelerometer ; catch(invalidoperationexception) statustextblock.text = Unable to start accelerometer ; 173

WP7 개발시작 (WPE03Ext01) -CS(Page1.xaml.cs) 에서코드생성 void accelerometer_currentvaluechanged(object sender, Sensor.) Deployment.Current.Dispatcher.BeginInvoke( ( )=>UpdateUI(e.SensorReading)); private void UpdateUI(Accelerometer accelerometerreading) statustextblock.text = "getting data ; Vector3 acceleration = accelerometerreading.acceleration; xtextblock.text = "X: " + acceleration.x.tostring("0.00"); ytextblock.text = "Y: " + acceleration.y.tostring("0.00"); ztextblock.text = "Z: " + acceleration.z.tostring("0.00"); xline.x2 = xline.x1 + acceleration.x * 200; yline.y2 = yline.y1 - acceleration.y * 200; zline.x2 = zline.x1 - acceleration.z * 100; zline.y2 = zline.y1 + acceleration.z * 100; 174

WP7 개발시작 (WPE03Ext01) -CS(Page1.xaml.cs) 에서코드생성 private void stopbutton_click(object sender, RoutedEventArgs e) accelerometer.stop(); statustextblock.text = accelerometer stopped ; 175

WP7 개발시작 (WPE04) 개발환경구축예제 - c:\wp7\wpe04 - 멀티터치 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Rectangle Name="rectangle1" Width="200" Height="200" Fill="Blue > <Rectangle.RenderTransform> <TransformGroup> <TranslateTransform/> <ScaleTransform/> </TransformGroup> </Rectangle.RenderTransform> </Rectangle> </Grid> 176

WP7 개발시작 (WPE04) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() InitializeComponent(); rectangle1.manipulationstarted += new EventHandler. rectangle1.manipulationdelta += new EventHandler.. rectangle1.manipulationcompleted += new EventHandler.. void rectangle1_manipulationstarted(object sender..) System.Diagnostics.Debug.WriteLine( 터치시작 ); void rectangle1_manipulationcompleted(object sender..) System.Diagnostics.Debug.WrteLine( 터치종료 ); 177

WP7 개발시작 (WPE04) -CS(MainPage.xaml.cs) 에서코드생성 void rectangle1_manipulationdelta(object sender, ) TransformGroup tg = (TransformGroup)rectangle1.RenderTransform; TranslateTransform tt = (TranslateTransform)tg.Children[0]; ScaleTransform st = (ScaleTransform)tg.Children[1]; tt.x += e.deltamanipulation.translation.x; tt.y += e.deltamanipulation.translation.y; st.scalex += e.deltamanipulation.scale.x; st.scaley += e.deltamanipulation.scale.y; String strout = String.Format( 터치이동 X:0, y:1 SX:2, SY:3, e.deltamanipulation.translation.x, e.deltamanipulation.translation.y, e.deltamanipulation.scale.x, e.deltamanipulation.scale.y); System.Diagnostics.Debug.WriteLine(strOut); 178

WP7 개발시작 (WPE05) 개발환경구축예제 - c:\wp7\wpe05 - Radio -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBlock Name= textblock1 Text= TextBlock /> <TextBlock Name= textblock2 Text= TextBlock /> <TextBlock Name= textblock3 Text= TextBlock /> </StackPanel> </Grid> 179

WP7 개발시작 (WPE05) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Devices.Radio; public MainPage() InitializeComponent(); string or = this.orientation.tostring(); MessageBox.Show(or); RadioPowerMode rpm = FMRadio.Instance.PowerMode; RadioRegion rrg = FMRadio.Instance.CurrentRegion; double ss = FMRadio.Instance.SignalStrength; // 신호강도 double fq = FMRadio.Instance.Frequency; // 주파수 switch(rpm) case RadioPowerMode.On: textblock1.text = FM라디오전원켜짐 (on) ; break; case RadioPowerMode.Off: textblock1.text = FM라디오전원꺼짐 (off) ; // 계속 break; 180

WP7 개발시작 (WPE05) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() // 계속 switch(rrg) case RadioRegion.Europe: textblock2.text = 유럽 ; break; case RadioRegion.Japan: textblock2.text= 일본 ;break; case RadionRegion.United States: textblock2.text= 미국 ;break; String strtext= ; strtext= 신호강도 : + ss.tostring( ####.## ) + \n + 주파수 : + fq.tostring( ####.## ); textblock3.text = strtext; 181

WP7 개발시작 (WPE06) 개발환경구축예제 - c:\wp7\wpe06 - Compass( 나침반 ) -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBlock Name= textblock1 Text= TextBlock /> <TextBlock Name= textblock2 Text= TextBlock /> <TextBlock Name= textblock3 Text= TextBlock /> </StackPanel> </Grid> 182

WP7 개발시작 (WPE07) 개발환경구축예제 - c:\wp7\wpe07 - Gyroscope -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBlock Name= textblock1 Text= TextBlock /> <TextBlock Name= textblock2 Text= TextBlock /> <TextBlock Name= textblock3 Text= TextBlock /> </StackPanel> </Grid> 183

WP7 개발시작 (WPE08) 개발환경구축예제 - c:\wp7\wpe08 - Motion Sensor -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBlock Name= textblock1 Text= TextBlock /> <TextBlock Name= textblock2 Text= TextBlock /> <TextBlock Name= textblock3 Text= TextBlock /> </StackPanel> </Grid> 184

WP7 개발시작 (WPF01) 개발환경구축예제 - c:\wp7\wpf01 - 카메라예제 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Name= button1 Content= 사진촬영 Margin= 0,0,0,513 Click= button1_click /> <Image Name= image1 Margin= 12,94,0,0 Width= 450 Height= 500 /> </Grid> 185

WP7 개발시작 (WPF01) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Tasks; using System.IO; using System.Windows.Media.Imaging; private void button1_click(object sender, RoutedEventArgs e) CameraCaptureTask cc = new CameraCaptureTask(); cc.completed += new EventHandler<PhotoResult>(cc_Completed); cc.show(); void cc_completed(object sender, PhotoResult e) String strsrc = e.originalfilename; MessageBox.Show(strSrc, 파일명, MessageBoxButton.OK); BitmapImage bmpimage = new BitmapImage(); bmpimage.setsource(e.chosenphoto); image1.source = bmpimage; 186

WP7 개발시작 (WPF02) 개발환경구축예제 - c:\wp7\wpf02 - Chooser -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Name="button1" Content="PhoneNumberChooser" Click="button1_Click"/> <Button Name="button2 Content="EmailAddressChooserTask" Click="button2_Click"/> <Button Name="button3" Content="PhotoChooserTask" Click="button3_Click"/> <Button Name="button4" Content="SaveEmailAddressTask" Click="button4_Click"/> <Button Name="button5" Content="SavePhoneNumberTask" Click="button5_Click"/> </StackPanel> </Grid> 187

WP7 개발시작 (WPF02) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Tasks; private void button1_click(object sender, RoutedEventArgs e) //PhoneNumberChooserTask : 전화번호선택을편리하게도와주는기능 PhoneNumberChooserTask pnct = new PhoneNumberChooserTask(); pnct.completed += new EventHandler<PhoneNumberResult>(pnct_Completed); pnct.show(); void pnct_completed(object sender, PhoneNumberResult e) MessageBox.Show(e.DisplayName + : + e.phonenumber); 188

WP7 개발시작 (WPF02) -CS(MainPage.xaml.cs) 에서코드생성 private void button2_click(object sender, RoutedEventArgs e) //EmailAddressChooserTask : 이메일주소를편리하게가져오도록도와주는기능 // 메일주소가 1 개이상일때는이메일선택창이보조로띄워진다. EmailAddressChooserTask eact = new EmailAddressChooserTask(); eact.completed+=new EventHandler<EmailResult>(eact_Completed); eact.show(); void eact_completed(object sender, EmailResult e) MessageBox.Show(e.DisplayName + : + e.email); 189

WP7 개발시작 (WPF02) -CS(MainPage.xaml.cs) 에서코드생성 private void button3_click(object sender, RoutedEventArgs e) //PhotoChooserTask : 사진을선택해서가져오기편리하게도와주는기능 PhotoChooserTask pct = new PhotoChooserTask(); pct.completed += new EventHandler<PhotoResult>(pct_Completed); pct.show(); void pct_completed(object sender, PhotoResult e) MessageBox.Show(e.OriginalFileName); 190

WP7 개발시작 (WPF02) -CS(MainPage.xaml.cs) 에서코드생성 private void button4_click(object sender, RoutedEventArgs e) //SaveEmailAddressTask : 이메일주소를저장 SaveEmailAddressTask seat = new SaveEmailAddressTask(); seat.email = kmjrabbit@live.com ; seat.show(); private void button5_click(object sender, RoutedEventArgs e) //SavePhoneNumberTask : 전화번호를저장 SavePhoneNumberTask spnt = new SavePhoneNumberTask(); spnt.phonenumber = 012-345-5435 ; spnt.show(); 191

WP7 개발시작 (WPF03) 개발환경구축예제 - c:\wp7\wpf03 - Task 예제 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Name= button1 Content= SearchTask Click= button1_click /> <Button Name= button2 Content= WebBrowserTask Click= button2_click /> <Button Name= button3 Content= PhoneCallTask Click= button3_click /> <Button Name= button4 Content= SMSComposeTask Click= button4_click /> </StackPanel> </Grid> 192

WP7 개발시작 (WPF03) -CS(MainPage.xaml.cs) 에서코드생성 using Microsoft.Phone.Tasks; private void button1_click(object sender, RoutedEventArgs e) SearchTask st = new SearchTask(); st.searchquery = 대구 ; st.show(); private void button2_click(object sender, RoutedEventArgs e) WebBrowser wbt = new WebBrowserTask(); string struri = http://www.dip.or.kr; if(!struri.startswith( http:// )) struri = http:// + struri; wbt.uri = new Uri(strUri, UriKind.Absolute); wbt.show(); 193

WP7 개발시작 (WPF03) -CS(MainPage.xaml.cs) 에서코드생성 private void button3_click(object sender, RoutedEventArgs e) PhoneCallTask pct = new PhoneCallTask(); pct.phonenumber = 053-1234-5678 ; pct.show(); private void button4_click(object sender, RoutedEventArgs e) SmsComposeTask sct = new SmsComposeTask(); sct.to= 053-1234-5678 ; sct.show(); 194

WP7 개발시작 (WPG04) 개발환경구축예제 - c:\wp7\wpg04 - 동영상 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= Button Name= button1 Click= button1_click /> <MediaElement Name= mediaelement1 Width= 417 Height= 507 /> </StackPanel> </Grid> 195

WP7 개발시작 (WPG04) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) mediaelement1.autoplay = true; mediaelement1.source = new Uri( silverlight.wmv, UriKind.Relative); mediaelement1.position = TimeSpan.FromMilliseconds(0); mediaelement1.volume = 1; mediaelement1.visibility = Visibility.Visible; mediaelement1.play(); 196

WP7 개발시작 (WPG05) 개발환경구축예제 - c:\wp7\wpg05 - 음악 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= MP3 재생시작 Height= 72 Name= button1 Click= button1_click /> <Button Content= MP3 재생중지 Height= 72 Name= button2 Click= button2_click /> <Button Content= 볼륨올리기 Height= 72 Name= button3 Click= button3_click /> <Button Content= 볼륨내리기 Height= 72 Name= button4 Click= button4_click /> </StackPanel> </Grid> 197

WP7 개발시작 (WPG05) -CS(MainPage.xaml.cs) 에서코드생성 using System.Windows.Media.Imaging; // 클래스변수 MediaElement me = null; Image im = null; private void button2_click(object sender, RoutedEventArgs e) if (me == null) return; me.stop(); im.visibility = Visibility.Collapsed; 198

WP7 개발시작 (WPG05) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) if(me==null) me = new MediaElement(); me.source = new Uri( Fame.mp3, UriKind.Relative); ContentPanel.Children.Add(me); im = new Image(); im.source = new BitmapImage( new Uri( Irene cara.jpg, UriKind.Relative)); im.height=300; im.width=300; im.verticalalignment = VerticalAlignment.Bottom ContentPanel.Children.Add(im); me.volume = 1; me.play(); im.visibility = Visibility.Visible; 199

WP7 개발시작 (WPG05) -CS(MainPage.xaml.cs) 에서코드생성 private void button3_click(object sender, RoutedEventArgs e) if (me == null) return; double dbvol = me.volume; dbvol += 0.1; if (dbvol >= 1) dbvol = 1; me.volume = dbvol; private void button4_click(object sender, RoutedEventArgs e) if (me == null) return; double dbvol = me.volume; dbvol -= 0.1; if (dbvol <= 0) dbvol = 0; me.volume = dbvol; 200

WP7 개발시작 (WPH01Ext01) 개발환경구축예제 - c:\wp7\wph01ext01 - HttpWebRequest, HttpWebResponse - WebRequest,WebResponse 클래스의 HTTP 관련구현을제공 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= Button Name= button1 Click= button1_click Width= 400 Height= 100 VerticalAlignment= Top /> </StackPanel> </Grid> 201

WP7 개발시작 (WPH01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 202

WP7 개발시작 (WPH01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 203

WP7 개발시작 (WPH01Ext02) 개발환경구축예제 - c:\wp7\wph01ext02 - HttpWebRequest, HttpWebResponse - WebRequest,WebResponse 클래스의 HTTP 관련구현을제공 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= Button Name= button1 Click= button1_click Width= 400 Height= 100 VerticalAlignment= Top /> </StackPanel> </Grid> 204

WP7 개발시작 (WPH01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 205

WP7 개발시작 (WPH01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 206

WP7 개발시작 (WPH01) 개발환경구축예제 - c:\wp7\wph01 - HttpWebRequest, HttpWebResponse 응용 - WebRequest,WebResponse 클래스의 HTTP 관련구현을제공 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= Button Name= button1 Click= button1_click /> <phone:webbrowser Name= webbrowser1 Width= 450 Height= 450 /> </StackPanel> </Grid> 207

WP7 개발시작 (WPH01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) String strurl = http://poten.tistory.com ; HttpWebRequest request; request = HttpWebRequest.Create(strUrl) as HttpWebRequest; request.begingetresponse( new AsyncCallback(GetResponse),request ); 208

WP7 개발시작 (WPH01) -CS(MainPage.xaml.cs) 에서코드생성 209

WP7 개발시작 (WPH02Ext01) 개발환경구축예제 - c:\wp7\wph02ext01 - WebClient 클래스이용 - uri 로식별되는리소스와데이터를주고받기위한메서드를제공 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <Button Content= Button Name= button1 Click= button1_click /> <ScrollViewer Name= scrollviewer1 Width= 430 Height= 500 > <TextBlock Name= textblock1 TextWrapping= Wrap /> </ScrollViewer> </StackPanel> </Grid> 210

WP7 개발시작 (WPH02Ext01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) String strurl = http://www.naver.com ; //WebClient 클래스 : uri 로식별되는리소스와데이터를주고받음 WebClient wc = new WebClient(); // 읽기완료시처리할이벤트핸들러작성 wc.openreadcompleted +=new OpenReadCompletedEventHandler(ReadCompleted); // 지정된리소스가포함된읽을수있는스트림을오픈 wc.openreadasync(new Uri(strUri, UriKind.Absolute)); 211

WP7 개발시작 (WPH02Ext01) -CS(MainPage.xaml.cs) 에서코드생성 void ReadCompleted(object sender, OpenReadCompletedEventArgs e) if(e.result!=null &&e.result.length!=0) using(stream stream = e.result) using(streamreader reader = new StreamReader(stream)) textblock1.text = reader.readtoend(); 212

WP7 개발시작 (WPH02) 개발환경구축예제 - c:\wp7\wph02 - WebClient 클래스이용, RSS -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBox Name= textbox1 /> <Button Name= button1 Content= RSS Click= button1_click /> <ScrollViewer Name= scrollviewer1 Width= 430 Height= 500 > <TextBlock Name= textblock1 TextWrapping= Wrap /> </ScrollViewer> </StackPanel> </Grid> 213

WP7 개발시작 (WPH02) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() InitializeComponent(); textbox1.text = http://poten.tistory.com/rss ; private void button1_click(object sender, RoutedEventArgs e) String strurl = textbox1.text; //WebClient 클래스 : uri 로식별되는리소스와데이터를주고받음 WebClient wc = new WebClient(); // 읽기완료시처리할이벤트핸들러작성 wc.openreadcompleted +=new OpenReadCompletedEventHandler(wc_OpenReadCompleted); // 지정된리소스가포함된읽을수있는스트림을오픈 wc.openreadasync(new Uri(strUri, UriKind.Absolute)); 214

WP7 개발시작 (WPH02) -CS(MainPage.xaml.cs) 에서코드생성 215

WP7 개발시작 (WPH02) -RSS 의구조 216

WP7 개발시작 (WPH02) -CS(MainPage.xaml.cs) 에서코드생성 217

WP7 개발시작 (WPH02) -CS(MainPage.xaml.cs) 에서코드생성 218

WP7 개발시작 (WPH10Ext01) 개발환경구축예제 - c:\wp7\wph10ext01 - WCF 기본 -Visual Studio 2010 에서 WCF 프로젝트생성새프로젝트 > Visual C# > WCF > WCF 서비스라이브러리 (Microsoft Visual Studio 2010 Express for Windows Phone 은 windows phone 프로젝트외에는지원안함 ) - IService1.cs 파일구조살펴보기 [ServiceContract] [OperationContract] [OperationContract] [DataContract] [DataMember] [DataMember].. 219

WP7 개발시작 (WPH10Ext01) -IService1.cs 220

WP7 개발시작 (WPH10Ext01) -Service1.cs 221

WP7 개발시작 (WPH10Ext01) -App.config 의 WCF 구성편집솔루션탐색기의 App.config 파일의우클릭 WCF 구성편집 > 서비스 > 끝점 > 빈이름 > Binding 을 wshttpbinding 에서 basichttpbinding 으로반드시변경 : 저장후실행시 WCF 테스트클라이언트가실행됨 : 가상서비스가호스팅됨. 222

WP7 개발시작 (WPH10Ext01Client) 개발환경구축예제 - c:\wp7\wph10ext01client - WCF 기본 -Windows Phone 7 프로젝트생성후 Add Service Reference 로조금전생성한 WCF 의메타주소를붙여 service 를추가한다. - XAML(MainPage.xaml.cs) 코드작성 <StackPanel> <TextBox Name= Textbox1 /> <Button Name= button1 Content= WCF Click= button1_click /> <ListBox Name= ListBox1 Height= 450 > <ListBox.ItemTemplate> <DataTemplat> 내형식맞춰줌.( 뒷부분에따로 ) </ListBox.ItemTemplate> </ListBox> </StackPanel> 223

WP7 개발시작 (WPH10Ext01Client) DataTemplate 내부분 <StackPanel> <TextBlock Name="textBlock1" Text="Binding ID" FontWeight="Black" Foreground="AliceBlue"/> <TextBlock Name="textBlock2" Text="Binding Name" FontStyle="Italic"/> <StackPanel Orientation="Horizontal"> <TextBlock Text=" 국어 "/> <TextBlock Name="textBlock3" Text="Binding Kor"/> <TextBlock Text=" 영어 "/> <TextBlock Name="textBlock4" Text="Binding Eng"/> <TextBlock Text=" 수학 "/> <TextBlock Name="textBlock5" Text="Binding Math"/> </StackPanel> </StackPanel> 224

WP7 개발시작 (WPH10Ext01Client) -cs(mainpage.xaml.cs) 코드작성 private void button1_click(object sender, RoutedEventArgs e) MyService.Service1Client client = new MyService.Service1Client(); client.getdatacompleted + new EventHandler<MyService.GetDataCompletedEventArgs> (client_getdatacompleted); client.getdataasync(textbox1.text); void client_getdatacompleted(object sender, MyService.GetData.) ListBox1.ItemsSource = e.result; 225

WP7 개발시작 (WCFService) 개발환경구축예제 - c:\wp7\wcfservice - WCF 기본 -Windows Phone 7 프로젝트생성후 Add Service Reference 로조금전생성한 WCF 의메타주소를붙여 service 를추가한다. - XAML(MainPage.xaml.cs) 코드작성 <StackPanel> <TextBox Name= Textbox1 /> <Button Name= button1 Content= WCF Click= button1_click /> <ListBox Name= ListBox1 Height= 450 > <ListBox.ItemTemplate> <DataTemplat> 내형식맞춰줌.( 뒷부분에따로 ) </ListBox.ItemTemplate> </ListBox> </StackPanel> 226

감사합니다. 김명정 Microsoft BizSpark Network Partner kmjrabbit@live.com 227