2008.06.17 07:19
WPF Performance Improvements

SP1 beta1에서는 WPF와 관련된 변화내용들이 상당히 많이 있습니다.
그 중의 대표적인 몇 가지를 추려 보면 아래와 같은 내용들을 볼 수 있습니다.

  • 자연스럽운 동영상 재생
  • Blur, DropShadow와 같은 Bitmap Effect 그리고 이런 효과들을 GPU 사용
  • 문자의 Rendering 속도의 개선인데 특히 Visual Brush에서 많이 개선
  • 2D Graphic 개선
  • 동시적인 Window의 성능 개선

이외에도 몇 가지 효과들이 함께 포함되었는데 이와 관련한 사항들은 아래에서 하나씩
짚어 보도록 하겠습니다.
아무튼 간단하게 볼 수 있는 WPF와 관련된 개선 사항은 ListView, ListBox, TreeView에서의 성능 개선을 들 수 있습니다. 스크롤시 성능 개선 사항이 40%라고 하고 있는데 내부적으로는 큰 개선이 있었던건 아닌것 같습니다. 어찌되었던 최적화를 통해서 스크롤의 성능 개선이 충분히 이루어진 것 뿐만 아니라 추가적인 혜택도 볼 수 있을 것 같습니다.

WPF Data Improvements

SP1에서는 Data Binding과 관련한 개선사항들이 있는데

  • 바인딩시에 StringFormat 을 사용할 수 있게 되었습니다.
  • ItemsControl은 List관련 컨트롤에서 하나의 아이템을 나타낼 때 사용하는 컨트롤인데 이와 관련된 바인딩이 개선되어서 관련된 행값의 속성 설정이 간단하게 처리됩니다.
  • Null값의 처리와 변환을 편집 가능한 컨트롤로 지원합니다.
  • 바인딩 항목에 대해서 Validation을 적용할 수 있습니다.
  • 멀티 선택이 가능합니다.
  • 항목의 편집, 추가, 삭제의 트렌젝션을 가능하게 IEditableCollectionView가 제공됩니다.
  • IEnumeratble 형식의 소스에 대하 바인딩 성능이 개선되었습니다.

올해 후반에 나올 기능으로는 Hook이라는 기능이 추가로 제공될 예정입니다. 이 기능을 사용하게 되면 가상 스크롤을 고유의 패널로 사용할 수 있게 되며 이를 통해서 WPF DataGrid를 구축할 수 있게 될 예정입니다.

WPF Extensible Shader Effects

SP1 Beta1에서는 새로운 음용효과와 아키텍쳐가 제공됩니다. WPF컨트롤이나 요소에는 좀더 시각적인 효과를 만들어서 적용할 수 있게 되엇습니다. 이런 효과들은 몇 가지 형태를 함께 사용할 수 있어서 좀 더 효과적입니다. 특히 이런 효과들의 처리를 CPU에서 처리하지 않고 Video Card에 내장된 GPU를 적극적으로 활용할 수 있게 된 점은 아주 고무적이라고 할 수 있습니다. 전체적으로 WPF의 표현은 좀 더 자유롭게 하면서 성능적으로는 더 가볍게 하는 장점이 있습니다.

간단하게 음영효과를 주기 위해서는 아래와 같은 코드를 입력하시면 됩니다.

사용자 삽입 이미지
<그림1> DropShadowEffect의 적용코드

사용자 삽입 이미지
<그림2> DropShadowEffect의 실행 모습

간단한 그림자 효과이지만 생각하기에 따라서는 다양한 효과로 함께 연출할 수 있다는 생각을 꼭 가지면 좋겠다는 생각이 듭니다. DropShadowEffect의 경우는 여러가지 객체들과 함께 사용할 수 있기 때문에 다양한 아이디어를 구사할 수 있는 장점이 있습니다.
사용자 삽입 이미지
사용자 삽입 이미지
<그림3> DirectionalBlurEffect를 사용해서 빠른 스크롤을 효과적으로 표현하는 예

이외에도 몇 가지 효과들이 더 추가 되었는데 이와 관련한 포스팅은 Greg Schechter의 블로그인
http://blogs.msdn.com/greg_schechter/archive/2008/05/09/a-series-on-gpu-based-effects-for-wpf.aspx 를 접속해 보면 자세한 내용을 확인 할 수 있다.

WPF Interoperability with Direct3D

WPF나 Direct3D는 모두 Direct X기반의 기술이다. Direct X기반의 기술들이라는 공통된 부모가 있으면서도 상호 운영에서 있어서 이제까지 한계점이 있었는데 SP1 부터는 직접적으로 이들을 함께 운영할 수 있는 방법을 제공해 주고 있습니다. 사실 Direct3D는 질감 표현이 뛰어난데 WPF와 DirectX를 함께 사용할 수 있기 때문에 여러가지 의미있는 도전들을 새롭게 생각해 낼 수 있게 되었습니다.
사용자 삽입 이미지
사용자 삽입 이미지
<그림 5> Direct X기반의 WPF와 Direct 3D의 상호 운영

VS 2008 for WPF Improvements

Visual Studio 2008 SP1을 통해서 WPF 프로젝트와 Designer가 많이 향상되었습니다.

  • 성능 개선
  • 속성 브라우저의 이벤트 탭
  • 속성 브라우저의 알파벳순 정렬
  • 폼 레이아웃에 대한 마진 설정 법
  • TabControl, Expander, Grid의 Designer 개선
  • XAML도 Update (코드를 리펙토링으로 초기화 함으로 가능함)
  • XAML로 선언된 지점으로 점프 및 참조 검색 지원

이외에 디버거도 런타임 오류가 일어나는 몇 케이스가 해결되었습니다.

사용자 삽입 이미지
<그림6> Visual Studio 2008 SP와 관련한 오류 케이스

신고
2008.06.15 10:04
RIA라는 단어 하나를 가지고 그 동안 JumpStart와 Mix On Campus로 기업과 학교를 다니면서 발표했던 Power Point File을을 PDF format으로 공개합니다. 기본적인 정의와 WPF와 Silverlight의 비교, 그리고 Silverlight 2.0에 관한 내용이 포함되어 있습니다.


신고
2008.04.11 17:52
데브부산에서 세미나를 하게 되었습니다.
저를 키워주고 길러준 부산/경남 지역에 계신 분들에게 UX와 관련된 기술들을 좀더 구체적으로
전달 해 드릴 수 있게 되어서 무척 기쁩니다.  이번에는 Microsoft의 WPF와 Silverlight를 개발하는 방법을
구체적으로 설명해 드릴 예정입니다.

자세한 내용은 아래 링크를 참조하시기 바랍니다.


일시: 2008.05.03 15:00~18:00
장소: 부산 경남정보대학 ICT빌딩 1층 아트홀
주제: UI혁명 WPF & Silverlight

http://www.devbusan.com/bbs/board.php?bo_table=seminar_devbusan


신고
2008.03.28 12:11

UX세미나가 지난 주 토요일을 마지막으로 잘 끝났습니다.  그 동안 참여해주시고 발표해 주신 여러 강사님들과 닷넷채널 운영자에게 이자리를 빌어서 감사의 말씀을 드립니다.


Day 1
WPF의 전반적인 내용과 개발자와 디자이너의 협업 모델에 대해서 설명하고 있습니다.
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032362446&EventCategory=3&culture=ko-KR&CountryCode=KR

Day 2
WPF의 Animation 기법에 대해서 설명합니다.
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032365257&EventCategory=3&culture=ko-KR&CountryCode=KR

WPF에서 사용할 동영상을 엔코딩 할 수 있는 Expression Media Encoder를 설명합니다.
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032365258&EventCategory=3&culture=ko-KR&CountryCode=KR

XAML에 대해서 심도 있게 설명을 합니다.
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032365259&EventCategory=3&culture=ko-KR&CountryCode=KR

Day 3
Data Binding을 설명해 드립니다.

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032373347&EventCategory=3&culture=ko-KR&CountryCode=KR

Win32 기반의 소프트웨어와 WPF가 공존 할 수 있는 방법을 설명합니다.
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032373349&EventCategory=3&culture=ko-KR&CountryCode=KR

Day 4
WPF에서 Resource와 Style을 사용하는 방법, Zoom In/out 및 Move기능을 제공하는 방법을 설명합니다. 그리고 마이크로소프트웨어 정희용 편집장의 RIA에 관한 재미있는 내용과 XAML Reader와 Flash를 활용하는 방법에 대해서 설명합니다.

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032374512&EventCategory=3&culture=ko-KR&CountryCode=KR


-------------------------------------------------------
김영욱 Microsoft MVP 2006~2008
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

신고
2008.03.26 14:20

XAML이 아무리 좋다고 한들 이제까지 많이 사용되고 있던 Graphic tool과 호환성에
문제가 있다고 하면 아무래도 발전속도나 확산속도에는 한계가 있을 수 밖에 없습니다.
하지만 XAML이 공개되어 있지 않거나 복잡한 포멧이 아니기 때문에 개발사의 의지만
있으면 XAML로 변환하는 일종의 Converter를 만드는게 꼭 어려운 일은 아닐 것 같습니다.

- Adobe IIlustrator

사용자 삽입 이미지

http://mikeswanson.com/XAMLExport  에서 다운로드 할 수 있으며 IIustrator 파일인 *.ai 파일을 XAML로 컨버팅 해줄 수 있는 기능을 가지고 있다. 의외로 디자인적인 소스를 컨버팅해 보면 별 무리없이 컨버팅 잘해오는 것을 볼 수 있는데 한 가지 문제가 있다고 하면 모든 도형들을 0.0에서 부터서 자기 위치까지를 가지는 캠퍼스 객체로 리턴해버리는 문제가 있다.

즉 가져온 소스를 기반으로 어떤 작업을 하려고 하면 일일히 또 다시 캠퍼스 사이즈를 다시 조정해야 할 경우도 생길 수 있다. 역시 제일 좋은 방법은 Expression Design에서 작업하는 것이겠지만. 그것이 여의치 않은 경우에만 사용하는 것이 좋겠다.

-Adobe Flash
사용자 삽입 이미지

http://www.mikeswanson.com/swf2xaml/ 에서 다운로드 할 수 있으며 Flash 혹은 Flex의 결과물인 *.swf를 XAML로 컨버팅 할 수 있는 툴이다. 하지만 직접 컨버팅 해본 결과 컨버팅 결과는 30% 정도의 완성도라고 할까.. 그렇다. 더욱이 Action Script 부분은 컨버팅 되지 않는 듯하다.
 물론 제가 이렇게 예기를 해도 또 컨버팅 테스팅을 해보시는 분들이 계실 것이고 컨버팅한 결과를 보자마자 "오 그래도 좀 컨버팅 되는데"라고 기뻐할 수도 있을 것 같지만 조금만 다시 들여다 보면 거의 제대로 컨버팅 되지 않는 다는 결론을 내릴 수 있을 것이다.
 사실 컨버팅이라는 것은 100%가 아닌 99%는 0%로 같은 의미로 받아들여야 할 경우도 많다.

-3D MAX
사용자 삽입 이미지
사용자 삽입 이미지

ZAM3D(http://www.erain.com/products/zam3d/DefaultPDC.asp)의 경우는 3D MAX에서 작업된 결과물인 *.3DS 파일을 XAML로 변환하는 툴인데 생각보다 상당히 완성도가 높은데다가 MAX의 가장 최신버전까지 잘 컨버팅 되는 것으로 알려져 있습니다. 특히 간단한 3D 디자인은 직접할 수 있어서 더욱더 유용한데 가격도 그리 비싸지 않게 책정되어 있어서 개인적으로는 필수적인 툴로 추천하고 있습니다.

이외에도 XAML Exporter for Blender(http://www.codeplex.com/xamlexporter)
Adobe Fireworks to XAML Exporter(http://www.infragistics.com/design/Fireworks_XAML_Exporter.aspx)
Lightwave to XAML Converter(http://www.shaxam.com/)
SVG to XAML Converter(http://www.wpf-graphics.com/ViewerSvg.aspx)
Aurora(http://www.mobiform.com/eng/aurora.html) : XAML Designer
Maya to XAML(http://www.highend3d.com/maya/downloads/tools/3d_converters/3782.html)
Online Converter from 3ds to XAML(http://www.wpf-graphics.com/Converter.aspx)
XamlXporter for Illustrator(http://www.codeplex.com/Wiki/View.aspx?ProjectName=xamlxporter)
PSD to XAML(http://flowlabs.net/psd2xaml.aspx)

등등이 있는데 테스트 되는데로 결과를 올려 놓도록 하겠습니다.

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2008
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

신고
2008.03.23 09:50


Visual Studio 2008에서 지원하고 있는 디자이너와 개발자의 협업과 제품 라이프 사이클의 관리 그리고 실버라이트와의 관게에 대해서 설명하고 있습니다.
신고
2008.02.14 10:23

WPF에서 작업하다 보면 WPF에서 제공하지 못하는 기능들을 다른 방법으로 구현하게 됩니다.
저도 지금 수행하고 있는 프로젝트에서 간단한 음성 녹음기를 만들게 되었습니다.
몇 가지 개발 방향을 검토하다가 결과적으로 선택한 방법이 Direct X를 이용하는 방법입니다.

C#에서도 Direct X를 잘 지원하기 때문에 여러가지 장점이 생기기도 하고
성능상의 이슈나 개발상의 이점을 가져 갈 수 있을 것 같습니다.

지금 제 PC에서 설치된 OS는 Window Vista 얼티메이트 버전인데
확인해 보니 Direct X 10 버전이 설치되어 있습니다.

지금 배포 대상  PC의 OS는 Windows XP 타블랫 PC 버전입니다.
따라서 Direct X 9이 설치되어 있을 것 같습니다.

결과적으로 Direct X의 설치 여부를 확인 할 수 있는 명령이 있습니다.

dxdiag를 입력해 보시면 Direct X 설치 현황을 보실 수 있습니다.
만약 dxdiag를 입력했을 때 아무 반응이 없으면 Direct X 5.0 이하의 버전이 있거나
혹은 설치되지 않았다고 보시면 됩니다.

녹음기 기능이 어느정도 정리되면 다시 포스팅하겠습니다. ^^

사용자 삽입 이미지

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2007
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------
신고
Direct X, WPF
2008.02.09 13:31

듀얼 모니터에서 WPF의 창을 배치하기 위해서는 약간의 꼼수가 필요하다.

기존의 닷넷 프로그래밍에서는
System.Windows.Forms.SystemInformation.MonitorCount를 이용해서
현재 시스템에 장착된 모니터의 갯수를 알 수 있었다.
또 해당되는 모니터의 상세한 정보를 얻고자 할 경우에는
System.Window.Forms.Screen.AllScreens[index].WorkingArea;와 같이 해당되는 모니터의
정보를 알아낼 수 있었다.

하지만 WPF에서는 기본적으로 모니터와 관련된 속성이나 기능을 추가로
제공되지 않는 것 같다.
실제로 몇몇 경우에는 듀얼 모니터를 활용하는 경우가 많고 또 개발시에도
듀얼 모니터를 이용하는 경우가 많기 때문에 WPF Application의 출력 모니터 지정은
꼭 필요한 기능중에 하나이다.

따라서 약간의 꼼수를 이용해서 이와 같은 상황을 해결할 수 있다.

fullScreenWindow.WindowStartupLocation = WindowStartupLocation.Manual;
System.Drawing.Rectangle workingArea = System.Windows.Forms.Screen.AllScreens[1].WorkingArea;
fullScreenWindow.Left = workingArea.Left;
fullScreenWindow.Top = workingArea.Top;
fullScreenWindow.Width = workingArea.Width;
fullScreenWindow.Height = workingArea.Height;
fullScreenWindow.WindowState = WindowState.Maximized;
fullScreenWindow.WindowStyle = WindowStyle.None;
fullScreenWindow.Topmost = true;
fullScreenWindow.Show();

WindowStartupLocation을 메뉴얼로 지정해야 위치를 지정하기 용의하며 위의 소스의 핵심은
System.Drawing.Rectangle workingArea = System.Windows.Forms.Screen.AllScreens[1].WorkingArea; 이다.
AllScreens[1]이라고 했기 때문에 이는 Primary Monitor가 아닌 Second Monitor의 정보를 가져와서 임시라 Ractangle을 하나 생성하고 이 정보를 바탕으로 출력하려고 하는 WPF Window를 셋팅하는 것이다.
원리는 간단한데 이 같은 생각을 해내기 까지가 힘든 과정이다. ^^

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2007
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

신고
WPF
2008.01.27 05:38

WPF로 미디어관련 플레이어를 만들때 참조할 수 있는 링크 입니다.

상세하게 설명되어 있고 MediaElement를 사용하는 예제가
자세하게 소개 되어 있습니다.

http://technet.microsoft.com/en-us/library/bb546936.aspx

신고
2008.01.26 22:14

WPF 의 커스터 마이징

WPF 2008.01.26 22:14
WPF를 커스터 마이징 하는 여러 방법들이 있는데
가장 쉬운 방법은 스타일을 재 정의해서 새로운 컨트롤인것 처럼 만드는 것입니다.


사용자 삽입 이미지

 MSDN에 좋은 글이 있어서 링크를 남겨 놓습니다.
http://msdn.microsoft.com/msdnmag/issues/07/01/Foundations/default.aspx?loc=ko

또 다른 글은 Eric Malamisura가 쓴  WPF ListView Cutomization이라는 글입니다.
http://www.elucidweb.com/blog/CommentView,guid,9fc45d4d-8104-458a-92fd-42a6a5d3c662.aspx
신고