본문 바로가기

C#

Get EntryAssembly List for WPF DesignTime Introduction VisualStudio 혹은 Expression Blend에서 동작하는 WPF DesignTime Extension을 개발하려고할때 현재 작업중인 Assembly에 대한 정보가 필요할 때가 있습니다. Runtime상에서는 System.Reflection.Assembly.GetEntryAssembly를 이용해 간단하게 현재 실행중인 Assembly의 정보를 가져올 수 있지만, DesignTime에서는 EntryAssembly를 가져올 수 없기 때문에 문제가 발생합니다. 이번시간에는 DesignTime에서 현재 작업중인 Assembly에 대한 정보를 가져오는 방법에 대해 소개합니다. GetEntryAssembly public static Assembly GetEntryAssembly(.. 더보기
NotifyCollectionChangedHelper for increasing performance Introduction Application을 개발할때 목록에 항목이 추가되거나, 제거 되었을때와 같은 동적인 변경내용을 수신기에 알리기 위해 일반적으로 목록객체에 INotifyCollectionChanged를 상속받아 구현하거나 INotifyCollectionChanged가 구현된 ObservableCollection등을 사용합니다. 동적인 목록의 변경에 대하여 즉각 반응하기 때문에 매우 유용하게 사용될 수 있지만, 많은 양의 목록이 추가/제거 될경우 매번 목록의 변동이 있을대마다 CollectionChanged이벤트가 발생하기 때문에 퍼포먼스에 크게 영향을 미칠 수 있습니다. 이번시간에는 많은 양의 아이템을 INotifyCollectionChanged가 구현된 목록에 추가/제거할때 Collection.. 더보기
Markup Extension for CommandBinding with RoutedEvent Introduction MVVM 패턴등을 이용해 Application을 개발할때 View에서 호출되는 RoutedEvent를 처리하는데 있어 몇가지 이슈가 발생하게 됩니다. 일반적인 방법으로 RoutedEvent를 Command로 연결하기 위해서는 View와 ViewModel간의 종속적인관계가 유지 View와 ViewModel의 분리를 원칙으로하는 MVVM패턴을 이용할 떄 이 방법은 좋은 방법은 아닙니다. 이번시간에 소개할 내용은 이러한 MVVM 패턴을 이용해 RoutedEvent를 처리해야 하는 상황에서 View와 ViewModel간의 연결 없이 RoutedEvent를 Command로 연결할 수 있는 방법에 대해 소개합니다. CommandBinding MarkupExtension 이번시간에는 Marku.. 더보기
Fastest Condensed Textblock Using GlyphRun Introduction WPF에서는 기본적으로 TextBlock나 FlowDocument 와 같은 텍스트 관련 컨트롤을 제공하고 있습니다. 이와 같은 컨트롤들은 텍스트와 관련된 일련의 과정을 개발자가 쉽게 사용할 수 있도록 고수준에서 제공되지만, 디테일한 텍스트조작을 지원하지 않습니다. TextBlock과 같은 고수준 컨트롤보다 좀더 디테일한 조작이 가능한 FormattedText를 제공하고 있지만, FormattedText는 WPF의 텍스트 기능 관점에서 텍스트를 그래픽 요소로 처리하기 때문에 DrawingContext의 DrawingText를 통해 텍스트를 렌더링 합니다. FormattedText에서는 텍스트의 Geometry를 생성할 수 있기 때문에 여러가지 효과(윤곽선, 모양등)를 적용하는데 용이.. 더보기
Global Hooking in .NET Introduction 이번 시간에는 전역 후킹(Global Hooking)에 대해서 알아보도록 하겠습니다. C/C++ 에서는 Win32 API를 이용하여 손쉽게 전역 후킹을 할 수 있습니다. 물론 .NET 에서도 Win32 API의 DLL 파일을 Import 하여 후킹이 가능합니다. 하지만 약간의 문제가 있습니다. 지역 후킹이 아닌 전역 후킹에서는 CallBack Procedure 를 DLL 파일로 만들어야 한다는 것이지요. 이런 이유로 .NET 에서는 전역 후킹이 안된다는 이야기가 많이 있습니다. 저 역시 초기에 이런 문제에 부딪혔습니다. Microsoft 에서 전역 후킹에 대해서 찾아보니 심지어 이런 내용이 있었습니다. (http://support.microsoft.com/kb/318804) 물론 .. 더보기