Top

찰스 페졸드의 WPF [C#과 XAML을 이용한 .NET 3.0 윈도우 프로그래밍]

  • 원서명Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation (ISBN 0735619573)
  • 지은이찰스 페졸드
  • 옮긴이최세영, 황상철, 김인기, 신희철
  • ISBN : 9788960776449
  • 50,000원
  • 2007년 10월 01일 펴냄 (절판)
  • 하드커버 | 1,304쪽 | 188*250mm
  • 시리즈 : 윈도우 시스템 프로그래밍

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/wpf)

윈도우 프로그래밍의 전설 찰스 페졸드에게 차세대 클라이언트 프로그래밍을 배운다!

마이크로소프트 .NET 프레임워크 3.0과 윈도우 비스타 환경에서의 새로운 클라이언트 프로그래밍 방법인 윈도우 프리젠테이션 파운데이션(WPF)에 대한 명확한 지침을 얻을 수 있다. 찰스 페졸드의 전문적인 설명으로, C# 코드와 XAML를 이용해 WPF 애플리케이션을 개발하는 법을 배우게 된다. 효과적이고 실제 작성해 볼 수 있는 수백 개의 예제가 있어 윈도우 비스타의 새로운 인터페이스와 그래픽 능력을 활용하는 데 필요한 기법들을 습득할 수 있다.

[ 이 책의 특징 ]

이 책은 마이크로소프트 윈도우에서 실행되는 프로그램을 개발할 때 마이크로소프트 윈도우 프레젠테이션 파운데이션(WPF)을 어떻게 사용하는지 보여주기 위해 쓰여졌다. 이 프로그램은 단독으로 실행되는 윈도우 애플리케이션(요즘은 클라이언트 애플리케이션이라고도 부른다)이 될 수도 있고 분산 애플리케이션 중 하나가 될 수도 있다. 처음 WPF가 등장 했을 때 마이크로소프트 윈도우 비스타를 위한 주요 API로 여겨졌으나, 사실 WPF 애플리케이션은 마이크로소프트 .NET 프레임워크 3.0이 설치된 마이크로소프트 윈도우 XP 서비스팩 2나 윈도우 서버 2003에서도 실행이 가능하다.
‘일반적인 형태의 윈도우 애플리케이션’을 WPF로 개발하더라도 과거의 윈도우 프로그램과는 일면 다르다. WPF는 컨트롤의 개선된 부분이나 애니메이션이나 3D 같은 새로운 그래픽 기능, 새로운 프로그래밍 인터페이스와 관련해서 새로운 모습과 새로운 철학을 담고 있다.
사실 WPF는 상호 관련성을 가진 두 가지의 프로그래밍 인터페이스를 갖고 있다. WPF 프로그램을 순전히 C#으로만 작성할 수도 있고, .NET 공통 언어 스펙(CLS)과 호환되는 다른 프로그래밍 언어로 작성할 수도 있다. 여기에 WPF는 XAML(XAML을 “자멜”로 발음한다)이라고 부르는 새로운 XML 기반의 마크업 언어를 가지고 있다. 그리고 특별한 경우 전체 프로그램을 XAML로 작성할 수도 있다. 그러나 이 책의 제목처럼 코드와 마크업 둘 다를 이용해서 프로그램을 개발하는 게 일반적이다. XAML을 UI와 그래픽과 애니메이션 같은 애플리케이션의 비주얼을 정의하기 위해 사용할 수 있으며, 코드로 사용자의 입력 이벤트를 처리할 수 있다.


[ 이 책에서 다루는 내용 ]

▶ 메뉴, 툴바, 트리 뷰, 리스트 뷰 같은 컨트롤을 만들고 개선하는 방법
▶ 동적 레이아웃을 사용해 컨트롤과 그래픽의 배치를 자동화하는 방법
▶ 의존 프로퍼티와 입력 이벤트의 라우팅을 활용하는 방법
▶ XAML 리소스, 스타일, 템플릿을 사용해 UI를 꾸미는 방법
▶ XAML에서의 데이터 바인딩 기법을 이용해 애플리케이션을 단순화시키고 효율적으로 만드는 방법
▶ XAML 브라우저 애플리케이션의 개발
▶ 인터랙티브한 그래픽과 미디어, 애니메이션을 사용해 매력적인 UI를 개발하는 방법


[ 이 책의 대상 ]

이 책의 독자는 C# 프로그래밍 언어와 이전 .NET 프레임워크에 대해 잘 알고 있다고 전제했다. 그러나 잘 알지 못한다면 찰스 페졸드의 『.NET Book Zero : What the C or C++ Programmer Needs to Know about C# and the .NET Framework』을 참조하길 바란다. 이 책은 저자의 웹사이트에서 자유롭게 내려 받을 수 있다.
프로그래밍을 시작하는 사람이라면 먼저 명령 프롬프트 창에서 실행되는 문자 기반의 콘솔 프로그램으로 C#을 배우길 권장한다. 저자가 집필한『Programming in the Key of C#: A Primer for Aspiring Programmers』(마이크로소프트 프레스, 2003)에서 이런 접근 방식으로 C#을 설명하고 있다.

저자/역자 소개

[ 저자 소개 ]

찰스 페졸드
찰스 페졸드는 역사상 가장 유명한 프로그래밍 서적 중 하나인 『Programming Windows』의 저자이다. 1994년에 마이크로소프트의 설립자인 빌 게이츠와 윈도우 매거진(Windows Magazine)이 수여하는 윈도우 파이오니어 어워드(Windows Pioneer Award)를 수상했다. 1985년 봄 윈도우 1.0 SDK의 베타를 처음 얻게 된 이후 개발을 시작해, 1986년에는 윈도우 프로그래밍에 대한 글을 처음으로 잡지에 기고했다. 클라이언트 애플리케이션 개발 부문 MVP로서, 많은 저술 활동을 하고 있으며 대표작으로는 『Code: The Hidden Language of Computer Hardware and Software』가 있다.


[ 역자 서문 ]

에이콘출판사가 『Application = Code + Markup』이라는 책의 번역서 출간에 참여하지 않겠냐는 제안을 했을 때 처음에는 조금 망설인 게 사실이다. 하지만 저자가 찰스 페졸드라는 말을 듣고 앞뒤 가리지 않고 덜컥 수락해 버렸다.

윈도우 프로그래머이면서 찰스 페졸드라는 이름을 모른다면 그 사람은 간첩이다. 1985년 윈도우가 처음 등장했을 때부터 페졸드의 “프로그래밍 윈도우 시리즈”는 윈도우 프로그래밍의 바이블이었다. 새로운 버전의 윈도우가 출시되면서 그의 책도 판 올림이 되었고, 윈도우 프로그래밍의 패러다임이 바뀔 때마다 저자는 빠지지 않고 이슈들을 다루어 책을 출간했다. 드디어 목마른 프로그래머들을 위해 .NET 프레임워크 3.0의 WPF까지 다루게 된 저자는 진정한 윈도우 프로그래밍계의 전설로 대접받을 자격이 있다.

윈도우 프로그래밍 할 때 자동화를 최대한 배제하고 기본적인 구조부터 속속들이 들여다보는 것을 “페졸드 식으로 공부했군요”라고 부를 정도로 그의 책은 다른 사람들과 확연히 구분된다. 그런 그가 마크업 언어를 포함하는 WPF를 다루는 책을 출간했다는 이야기를 듣고 약간의 염려도 되었지만, 책을 보는 순간 그것은 기우에 지나지 않았다는 생각이 들었다.

■ C#을 이용한 완벽한 WPF 구현을 보여준다.

1부에서는 C#을 가지고 WPF의 갖가지 구성 요소를 빠짐없이 다루고 있다. XAML과 같은 마크업 기반의 언어를 사용하다 보면 하부 구조에 대한 이해가 부족하다고 느낄 수 있는데, 1부에서 이런 내용에 대한 설명을 충분히 제공하고 있다.

■ XAML을 이용한 윈도우 프로그래밍이 무엇인지를 가르쳐준다.

2부에서는 XAML을 통해 WPF를 다루는 방법을 유용한 예제를 통해 공부한다. 기존의 C, C++, C# 스타일의 프로시저를 구현하는 형태의 개발을 계속해온 사람은 마크업 언어에 상당한 거부감을 느끼기 마련이지만, 2부에서 설명하는 마크업 언어인 XAML은 애플리케이션 개발의 패러다임을 완전히 바꿀 수 있는 획기적인 것이다. C#과 XAML을 사용해 간단한 컨트롤에서부터 2D, 3D 그래픽을 다뤄봄으로써 XAML이 기존 개발 형태에 어떻게 효율성을 가져다 주는지에 대해 저자는 책 전체를 통해 장점을 속속들이 보여주고 있다.

■ 실용적인 예제를 충분히 다루고 있다.

단순한 형태의 예제를 위한 예제가 아니라 실전에서 사용할 수 있는 예제를 통해 설명하고 있다. 간단한 컨트롤을 사용하는 것부터 XAML Cruncher라는 실제로 XAML을 배우고 개발하는 데 사용할 수 있는 프로그램까지 책 전체에 걸쳐 200개 이상의 C#과 XAML 예제를 제공하고 있다.
천 페이지가 넘어가는 분량의 책을 번역하면서 여러 가지 어려움이 많았다. “WPF에서 새롭게 등장한 구문에 대한 용어 표준은 어떻게 할 것인가?” “게다가 그림 하나 없는 이 책을 과연 독자들이 어떻게 받아들일까?”하는 것이었다. 특히 원서와 같이 그림 한 장 없이 UI 프로그래밍을 공부하려면 백문이 불여일견이라는 옛 진리를 철저히 외면하면서 장님 코끼리 만지기 식으로 공부해야만 한다. 물론 저자의 본래 의도는 독자가 예제를 직접 실행해 보기를 원해서였다고 한다. 하지만 저자도 그림을 삽입하지 않은 무모함에 일부 실수를 인정했을 정도로 UI 프로그래밍에서 눈으로 보는 것은 매우 중요하다. 몇 번의 회의 끝에 결국 이해를 높이기 위해서 원서에도 없는 실행 결과를 캡처해 넣기로 결정했으며, 저자 또한 이 작업에 적극적인 지지를 보였다.
끝으로 이렇게 좋은 책을 먼저 읽고 번역에까지 참여할 수 있는 기회를 주신 에이콘출판사 여러분에게 진심으로 감사드리며, 아직 제대로 된 .NET 프레임워크 3.0 책이 많지 않은 상황에 이 책이 WPF를 공부하고자 하는 사람들의 이해를 높여주는 데 기여해주길 기대한다.


[ 역자 소개 ]

최세영
연세대학교 천문대기과학과와 컴퓨터공학과를 졸업하고, 연세대학교 공학대학원에서 공학 석사학위를 받았다. 초등학교 6학년 때 애플 컴퓨터를 접하면서 개발자로서의 삶을 시작했다. 나모 인터랙티브에서 나모 웹에디터 FX를 함께 개발했으며, SBSi에서 시스템 개발과 웹 개발자 및 프로젝트 매니저로 일했다. 현재는 ClickWorks의 대표이며, 소셜 네트워크와 집단 지성에 관심을 가지고 이에 기반한 새로운 웹서비스를 준비하고 있다. 『Essential C++』(Stanley B. Lippman 저)를 번역 출간했다.

황상철
경희대학교 산업공학과를 졸업하고 동 대학원에서 경영과학을 전공했다. 현재 삼성 SDS Eng. Methodology팀에서 방법론 제정 및 확산 업무를 맡고 있다. J2EE, CSDP 교육 과정 개발 및 교육, 디자인 패턴 온라인 과정 개발, 윈도우 비스타 T/F 등에 참여했으며, 삼성화재 차세대 등의 프로젝트에서 소프트웨어 아키텍트로 활동하다가 현재는 ITO 조직을 위한 방법론 확산 작업을 수행하고 있다. 오픈소스, 애자일, 상호호환성 등에 관심이 많으며, 실용주의 이야기 블로그를 운영하고 있고, 에이콘출판사에서 출간한 『SOA: 서비스 지향 아키텍처』를 번역했다.

김인기
한양대학교 대학원에서 전력전자를 전공하고, C/C++ 프로그래머로서 10년 넘도록 리얼타임 임베디드 시스템과 윈도우 기반의 솔루션 개발 일을 하고 있다. 그동안 군더더기 없이 간결한 시스템을 설계하기 위해 노력했으며, 현재 이노에이스에서 새로운 모바일 솔루션을 기획하고 있다. 새로운 것 배우기를 좋아하고, 지금은 어떻게 하면 세상을 편하게 할 제품을 만들 수 있을지와 어떻게 하면 그런 제품을 만드는 개발자를 편하게 해줄 수 있을지를 고민하고 있다.

신희철
경희대학교 컴퓨터공학 학사 과정을 졸업하고 고려대학교 컴퓨터학과 석사 과정을 휴학 중이다. 윈도우 애플리케이션 개발에 10여 년을 종사하면서 다수의 프로젝트에 참여했으며, 현재는 한국IBM의 Service Management팀에서 ITSM 관련 업무를 수행하고 있다. 더 이상 프로그래밍으로만 생계를 유지하지 않지만 그렇기에 더욱 부담 없이 프로그래밍 할 수 있어서 행복한 서른 살의 청년이다.

목차

목차
  • 1부 _ 코드
  • 01장 Application과 Window 25
  • 02장 브러시 49
  • 03장 컨텐트 75
  • 04장 버튼과 컨트롤 99
  • 05장 StackPanel과 WrapPanel 129
  • 06장 DockPanel과 Grid 151
  • 07장 캔버스 183
  • 08장 의존 프로퍼티 195
  • 09장 입력 이벤트의 라우팅 213
  • 10장 커스텀 엘리먼트 245
  • 11장 단일 자식 엘리먼트 267
  • 12장 커스텀 패널 307
  • 13장 리스트 박스 335
  • 14장 메뉴 계층 구조 375
  • 15장 툴바와 상태바 409
  • 16장 트리 뷰와 리스트 뷰 441
  • 17장 인쇄와 대화상자 485
  • 18장 노트패드 클론 533
  • 2부 _ 마크업
  • 19장 XAML 587
  • 20장 프로퍼티와 속성 627
  • 21장 리소스 675
  • 22장 창, 페이지, 탐색 703
  • 23장 데이터 바인딩 777
  • 24장 스타일 823
  • 25장 템플릿 859
  • 26장 데이터 입력하기, 데이터 보기 931
  • 27장 그래픽 셰이프 983
  • 28장 지오메트리와 패스 1015
  • 29장 그래픽 변환 1069
  • 30장 애니메이션 1125

관련 블로그 글

『찰스페졸드의 WPF』가 출간되었습니다!

드디어 『찰스 페졸드의 WPF: C#과 XAML을 이용한 .NET 3.0 윈도우 프로그래밍』이 출간되었습니다. 윈도우 프로그래밍의 대가인 찰스 페졸드가 오랜만에 선보인 저서이기도 하거니와, 저희 에이콘 "Microsoft Press" 연작의 첫 책이라는 점에서도 매우 의미가 깊은 책입니다. 그러고 보니 『TCP/IP 완벽 가이드』(1,600페이지)에 이어 두 번째로 두꺼운 책(1,308페이지)이기도 하네요.


일전에 말씀드렸듯이 이번 책에는 원서에는 없는 캡처 화면들을 삽입하느라 역자분들께서도 많은 공을 들이셨습니다. 그래서 본문 내용도 더더욱 뽀사시하고 예쁘게 잘 나온 듯합니다.


.NET 3.0이 나오고 개발자들에게 많이 받는 질문은 .NET 3.0을 하기 위해 무엇을 가장 먼저 봐야 하느냐는 것이다.이때 항상 하는 대답은 WPF의 API를 보기 전에 XAML에 대해 먼저 공부하라는 것이다. XAML을 알고 있는 것과 모르는 것은분명 큰 차이가 있다. 그런 의미에서 WPF와 XAML을 이해하는 데 있어서 페졸드의 『Programming Windows』시리즈의 연장선상에서 출간된 이 책은 개발자들에게 정말 훌륭한 선택이 될 것이다.
강성재 과장 / 한국 마이크로소프트 개발자 및 플랫폼 사업 총괄 개발자 전도사

이 책은 WPF에 대한 해부학 보고서라고 할 수 있다. 사람에 비유했을 때 코드가 명령을 내리는 두뇌라고 한다면, 마크업은 구조를 이루는 몸통으로 이해할 수 있다. 윈도우 프로그래밍의 새로운 장을 여는 WPF를 효과적으로 설명하기 위해서 저자는 두뇌에서부터 몸통에 이르기까지 새로운 기술에 대해 샅샅이 설명해 주고 있다. 정말로 흥미로운 여행이 아닐 수 없다.
황리건 과장 / 한국 마이크로소프트 사용자 경험 전문가

김인기 님이 개인적인 일로 참석을 못하시고 최세영님, 신희철님, 황상철님 역자 세분 모두 오셔서 책 받아보시고 뿌듯해하셨지요. 이번 책 역자 감사의 글을 살펴보시면 두 분 미혼남성의 재치어린 문구가 눈에 띕니다. 특히 모 역자분이 여친에게 보내는 암호 문구는 정말 눈물 겹습니다. 이걸 찾아내시는 독자분께는 감히 "천재"라는 호칭을 내려드립죠! ^^

어제 저희는 WPF 출간기념으로 사장님께서 원스 심야영화 상영회를 베풀어주셨습니다. 한밤에 후끈한 에이콘 회동은 역시나 즐거웠답니다. 개인적으로 두 번째로 다시 본 원스는 정말 아름다웠구요. 아, 또 보고 싶어지네요. 중독이 되어버렸나봅니다. --; 자, 이제 저희는 두 권의 신간 마감을 하러 이제 또 마구 달려야겠습니다.

저희 WPF 책에 많은 관심 부탁드리며 궁금하신 점이나 부족한 점이 눈에 띄면 언제든지 저희에게 연락주세요. 독자 여러분의 따뜻한 성원에 늘 감사드립니다. m(_._)m

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

국내 첫 WPF 책,『찰스 페졸드의 WPF』가 출간됩니다!
찰스 페졸드 지음 | 최세영 황상철 김인기 신희철 옮김 | 1304페이지 |
하드커버 양장 | 2007년 10월 1일 출간 | 50,000원

그간 숱한 화제 속에 독자들을 애타게 기다리게 했던 찰스 페졸드의 신간이 10월 1일 드디어 출간됩니다. 『Programming Windows』의 후속편 격인 이 책의 장점은 간단히 다음 세 줄로 요약할 수 있을 것입니다.

■ C#을 이용한완벽한 WPF 구현을 보여준다.
■ XAML을이용한 윈도우 프로그래밍이 무엇인지를 가르쳐준다.
■ 실용적인 예제를 충분히 다루고 있다.

Applications = Code + Markup이라는 이 책의 원서명에서도 잘 알 수 있듯이 이 책에서는 1부 코드와 2부 마크업으로 나눠 C#과 XAML을 이용한 .NET 프레임워크 3.0 윈도우 프로그래밍의 진수를 보여주고 있습니다.

이 책은 에이콘에서는 처음 출간하는 Microsoft Press의 책인데다가 1000페이지가 넘는 방대한 내용과 찰스 페졸드라는 저자가 지니고 있는 유명세로 인해서인지 훌륭한 역자분들을 찾기도 쉽지 않았던 지난한 작업이었습니다.

SOA: 서비스 지향 아키텍처』를 번역한 황상철님을 제외하고는 공교롭게도 나머지 세분 신희철, 최세영, 김인기 님은 모두 저희 출판사에 역자 신청 메일을 보내고 번역 샘플 테스트를 거쳐 함께 일하게 된 분들이었습니다. 사실 공역은 용어나 문체 통일 문제 등에 있어서 매우 어려운 작업입니다. 하지만 감사하게도 아무 연고도 없이 에이콘이 펴낼 찰스 페졸드의 책이라는 한 가지만으로 엮인 네 분들이 보여주신 동료애는 참 보기 좋았더랍니다. :)

사진 왼쪽부터 김인기님, 신희철님, 최세영님, 황상철님이십니다.
지난 4월 강남역 근처에서 첫 역자 모임을 가진 날이었죠? ^^/

특히 옮긴이 서문에서도 나오는 이야기지만, 이 책의 원서에는 XAML을 이용한 마크업을 설명하는 책이 절반을 차지함에도 불구하고 긴 샘플 예제코드를 실행한 결과 화면이 들어있지 않습니다. 이에 대해서는 처음부터 번역에 참여한 신희철님께서 페졸드에게 직접 메일을 보내 확인한 내용이지만, 저자 본인도 여타 사정에 의해 그림을 삽입하지 못한 것을 매우 아쉬워했습니다. (올초쯤 출간된 독일어 번역본에도 그림을 넣었다는 말을 저자에게 전해 들었습니다.) 그래서 역자분들과 편집팀은 실행결과를 보여주는 화면 그림을 일일이 넣어 독자들에게 더 좋은 책을 만들어드리자고 의기투합을 했습니다.

윈도우 비스타를 깔았다는 이유 하나만으로 (하지만 책에 대한 뜨거운 열정때문으로!) 황상철님께서 십자가를 짊어지고 코드를 전부 실행하여 2백여개에 달하는 수많은 그림을 캡처해 책에 넣어주셨습니다. 지금 며칠간의 일정으로 네트웍이 끊긴 연수원에 들어가 계셔서 마무리 작업에 참여하지 못해 안타까워 하고 계실 황책임님, 정말 고생 많으셨습니다. ;) 늘 서로를 배려하고 열심히 노력해주신 네 역자분들을 만나게 된 것은 저희 에이콘으로서도 매우 큰 행운이었습니다. 감사합니다. :D 또한 추천의 글을 흔쾌히써주신 한국 마이크로소프트의 강성재 과장님과 황리건 과장님께도 진심으로 감사합니다. 마지막으로 1300페이지에 달하는 책을 열심히 편집해주신 박창기님께도 감사의 말씀을 전합니다.

WPF를 필두로, WDF, WCF 등 새로운 길을 열어가는 좋은 책을 만들기 위한 에이콘의 발걸음은 쭈욱~ 이어질 것입니다. 여러분의 많은 성원 바랍니다! 곧 나올 국내 첫 WPF 책 많이 사랑해주세요!

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p40 두 번째 코드 14행 ]
Title = "Inherit App & Window" → Title = "Inherit App & Window";

[ p51 7번째 문단 1행 ]
2.2의 지수승은 → 지수승 2.2는

[ p56 아래에서 4행 ]
PropertyInfo[] props → PropertyInfo[] props;

[ p92 6행 ]
txt.FontSize = 32 → txt.FontSize = 32;

[ p117 아래에서 5행 ]
Background와 Foreground 브러시 폰트도 지정할 수 있다.
→ Background와 Foreground 브러시 폰트도 지정할 수 있다.

[ p119 본문 3행 ]
그리고 창의 크기에 맞게 컨텐트의 크기도 조절이 되며
→ 컨텐트의 크기에 맞게 창의 크기도 조절되며

[ p121 세 번째 문단 2행 ]
Eneter 키를 → Enter 키를

[ p127 2행 ]
Document 프로퍼티는 lowDocument 타입이며, → Document 프로퍼티는 FlowDocument 타입이며,

[ p151 세 번째 문단 2행 ]
갈이 생성한다. → 같이 생성한다.

[ p151 세 번째 코드 위로 1행 ]
DocPanel → DockPanel

[ p153 코드 21행 ]
btn.SetValue(DockPanel.DockProperty, (Dock)(i % 4))
→ btn.SetValue(DockPanel.DockProperty, (Dock)(i % 4));

[ p186 아래에서 세 번째 문단 2행 ]
열거형 값 FillRule.EvenOdd는 영역을 닫히게 만드는 폴리곤의 선에 근거한 알고리즘에 의해 구현된다. 한 방향으로 가는 선의 수에서 다른 방향으로 가는 선의 수를 뺀 값이 홀수인 경우에만 그 영역은 채워지게 된다.
→ FillRule.EvenOdd 열거형 값을 사용하면 외부공간으로부터 폐곡선을 구분짓는 다각형의 선들에 근거한 알고리즘을 기반으로 한다. 외부공간에서 폐곡선 내로 선을 그었을 때, 가로지르는 선의 수가 홀수인 경우에만 영역을 채운다.

[ p207 아래에서 5행 ]
추가할 때 원래의 metadata를 사용하는 것이 아니라 그 자신의 metadata를 생성해야 한다.
→ 추가할 때 원래의 metadata가 적용되지 않으므로 반드시 그 자신의 metadata를 생성해야 한다.

[ p215 아래에서 두 번째 문단 1행 ]
MouseDown 이벤트의 발생이 OnMouseDown의 호출 외부에서 일어나기 때문이다.
→ MouseDown 이벤트를 OnMouseDown의 외부에서 발생시키기 때문이다.

[ p229 네 번째 문단 2행 ]
이 메소드는 MouseButtonEventHandler 타입의 객체를 동반한다.
→ 이 메소드는 MouseButtonEventArgs 타입의 객체를 동반한다.

[ p229 5번째 문단 3행 ]
특정 커서를 연결시키려면 Cursor 객체 FrameworkElement에 정의된 Cursor 프로퍼티 설정하면 된다.
→ 특정 커서를 연결시키려면 Cursor 객체 FrameworkElement에 정의된 Cursor 프로퍼티 설정하면 된다.

[ p229 아래에서 3행 ]
마우스 버튼이 눌려질 때 Button에서는 Click
→ 마우스 버튼을 눌렀다 떼면 Button에서는 Click

[ p230 2행 ]
표현이 다시 정상 상태로 → 표면이 다시 정상 상태로

[ p244 3~5행 ]
String.Format(strFormatKey, args.RoutedEvent.Name,
     args.Key, args.Systemkey, args.ImeProcessedKey, args.KeyStates,
     args.IsDown, args.IsUp, args.IsToggled, args.IsRepeat);

[ p267 4행 ]
UIElement를 상속받은 Visual 클래스 → UIElement의 부모인 Visual 클래스

[ p287 아래에서 2행 ]
Button Chrome 객체는 → ButtonChrome 객체는

[ p291 14행 ]
// (No TargetName is needed because it's the button's property.)
→ // (버튼의 프로퍼티이므로, TargetName은 불필요함)

[ p336 아래에서 7행 ]
System.Globalication → System.Globalization

[ p336 아래에서 2행 ]
ListBox를 채우는 다른 방법으로 ItemsControl에 의해 정의된 ItemsSource 프로퍼티에 설정하는 방법이 있다.
→ ListBox를 채우는 또 다른 방법은 ItemsControl 타입인 ItemsSource 프로퍼티에 설정하는 것이다.

[ p337 11행 ]
특정 항목을 선택하게 자동으로 처리하지 않는데, 프로그램이 항목을 선택하게 지원하지 않으면 사용자가 컨트롤에 손대기 전까지
→ 특정 항목을 자동으로 선택하지 않는다. 만일 프로그램이 특정 항목을 명시하지 않으면 컨트롤의 항목을 사용자가 직접 선택하기 전까지

[ p337 아래에서 9행 ]
ListBox에서는 Selector에서 정의된 SelectionChangee 이벤트가
→ ListBox에서는 Selector에서 정의된 SelectionChanged 이벤트가

[ p339 그림 아래로 2행 ]
입력 포커스를 설정하지 않아서 초기에는 선택된 항목이 없는데,
→ 입력 포커스를 설정하지 않았고, 선택된 항목도 없는데

[ p339 그림 아래로 3행 ]
하나를 클릭함으로써 바뀌게 된다. 윈도우의 배경색은 다른 색으로 변한다.
→ 하나를 클릭함으로써 윈도우의 배경색을 선택한 색으로 바꿀 수 있다.

[ p340 두 번째 문단 2행 ]
ListBox를 특정한 크기로 설정하는 것이 일반적이다.
→ ListBox의 경우 명시적으로 크기를 설정하는 것이 일반적이다.

[ p340 네 번째 문단 2행 ]
ListBox에서 SelectedItem 속성을 통해서
→ ListBox에서 SelectedItem 프로퍼티를 통해서

[ p340 네 번째 문단 4행 ]
항목은 문자열이다, 그래서
→ 항목은 문자열이다. 그래서

[ p340 네 번째 문단 5행 ]
다시 리플렉션으로 돌아가보자
→ 이문자열을 Color 객체로 변경해야 하는데 리플렉션을 사용하면 가능하다.

[ p340 네 번째 문단 6-7행 ]
GetProperty를 호출하면 ~ 객체를 구해준다.
→ GetProperty 메소드는 Colors의 정적 프로퍼티와 연결되는 PropertyInfo 객체를 구해주지만 GetValue 메소드는 Colors의 정적 프로퍼티와 연결되는 Color 객체를 구해준다.

[ p341 두 번째 문단 2행 ]
ListBox 클래스가 다중 선택 박스를 지원해야 할 수도 있기 때문에
→ ListBox 클래스가 다중 선택 박스를 지원해야 하는 경우가 있기 때문에

[ p341 두 번째 문단 5행 ]
AddItems와 RemoveItems라는 두 개의 → AddedItems와 RemovedItems라는 두 개의

[ p341 두 번째 문단 6행 ]
선택한 항목의 컬렉션에 새로 추가했거나 제거한 항목을 가리키는 항목 목록이다.
→ 선택된 항목을 저장하는 컬렉션에 새로 추가되거나, 제거된 항목에 대한 리스트를 가지고 있다.

[ p342 그림 아래로 2행 ]
이렇게 하지 않으면 매우 곤란해 질 것이다. → 그렇지 않으면 더 어려워진다.

[ p345 두 번째 문단 1행 ]
정적 생성자는 이 클래스의 기능에서 매우 중요하다.
→ 정적 생성자는 이 클래스에서 매우 중요한 기능을 담당한다.

[ p345 두 번째 문단 2-4행 ]
클래스의 각 프로퍼티별로 ~ 정적 메소드 All로 사용할 수 있다.
→ 정적 NamedColor 생성자는 Color 객체 내의 프로퍼티별로 NamedColor 타입의 객체생성을 위해 인스턴스 생성자를 호출한다. 이렇게 생성된 NamedColor 객체들을 배열 필드로 저장하였고, 정적 프로퍼티인 All을 이용하여 접근할 수 있도록 했다.

[ p345 10번째 문단 1행 ]
Foreach 루프나 ItemsSource
foreach 루프나 ItemsSource

[ p345 10번째 문단 2행 ]
모든 항목이 NamedColor 타입인 것은 마찬가지다. → 모든 항목은 NamedColor 타입으로 동일하다.

[ p345 11번째 문단 1행 ]
이 프로퍼티를 ListBox에서 항목을 나타내기 위해 사용할 프로퍼티 이름이 들어있는 문자열로 설정할 수 있다.
→ 이 프로퍼티에 ListBox에서 항목을 나타내기 위해 사용할 프로퍼티 이름을 문자열로 설정할 수 있다.

[ p345 아래에서 4행 ]
“AliceBlue” 대신에 “Aclice Blue”로 나타난다. → “AliceBlue” 대신에 “Alice Blue”로 나타난다.

[ p346 8행 ]
“알려준다.”와 “(Display” 사이 문장 누락
→ 알려준다. SelectedValuePath는 ListBox에게 사용자가 SelectedValue를 참조했을 때 어떤 프로퍼티를 반환해야 할지 알려준다(Display

[ p359 소스코드 내 4행 ]
StackPanel stack = newStackPanel(); → StackPanel stack = new StackPanel();

[ p362 소스코드 내 11행 ]
ColorListBox lstbox = newColorListBox(); → ColorListBox lstbox = new ColorListBox();

[ p363 소스코드 내 아래에서 11행 ]
DataTemplate template = newDataTemplate(typeof(NamedBrush));
→ DataTemplate template = new DataTemplate(typeof(NamedBrush));

[ p367 소스코드 내 3행 ]
Rectangle rect = newRectangle(); → Rectangle rect = new Rectangle();

[ p368 소스코드 내 20행 ]
StackPanel stack = newStackPanel(); → StackPanel stack = new StackPanel();

[ p368 소스코드 내 아래에서 8행 ]
ColorGridBox clrgrid = newColorGridBox(); → ColorGridBox clrgrid = new ColorGridBox();

[ p372 소스코드 내 1행 ]
StackPanel stack = newStackPanel(); → StackPanel stack = new StackPanel();

[ p372 소스코드 내 12행 ]
ColorWheel clrwheel = newColorWheel(); → ColorWheel clrwheel = new ColorWheel();

[ p378 소스코드 내 12행 ]
public static voidMain() → public static void Main()

[ p379 소스코드 내 아래에서 16행 ]
MenuItem itemWindow = newMenuItem(); → MenuItem itemWindow = new MenuItem();

[ p398 세 번째 소스코드 내 ]
foreach (KeyGesture gest in gests.Keys)
    if (gest.Matches(null, args))
    {
        gests[gest](this, args) args.Handled = true;
    }

foreach (KeyGesture gest in gests.Keys)
    if (gest.Matches(null, args))
    {
        gests[gest](this, args);
        args.Handled = true;

    }

[ p400 소스코드 내 아래에서 5행 ]
MenuItem itemEdit = newMenuItem(); → MenuItem itemEdit = new MenuItem();

[ p400 소스코드 내 마지막 행 ]
MenuItem itemCut = newMenuItem(); → MenuItem itemCut = new MenuItem();

[ p401 소스코드 내 17행 ]
CommandBinding.Add(newCommandBinding → CommandBinding.Add(new CommandBinding

[ p406 5행 ]
run.TextDecorations = new TextDecoration컬렉션();
→ run.TextDecorations = new TextDecorationCollection();

[ p407 소스코드 내 12행 ]
item.Tag asTextDecoration); → item.Tag as TextDecoration);

[ p566 14행 ]
// 방향(위로/아랴로) → // 방향(위로/아래로)

[ p605 4행 ]
Windows Workflow Foundation(WPF) → Windows Workflow Foundation(WWF)

[ p792 코드 내 1행 ]
LongBindingPath.xam → LongBindingPath.xaml

[ p828 코드 내 아래에서 9행, 6행, 3행 ]
<Button Style={StaticResource normal}">
→ <Button Style="{StaticResource normal}">