'AttachedDependencyProperty'에 해당되는 글 2건

  1. 2009/08/12 On Screen Keyboard Helper in WPF (2)
  2. 2009/05/14 WPF PixelSnapper Class Using Attatched DependencyProperty (2)
WPF2009/08/12 18:13

안녕하세요. 김대욱입니다. 최근들어 터치스크린을 이용한 프로젝트를 자주 진행하다보니 이번 포스팅은 터치스크린을 이용하는 시스템에서 유용하게 사용될 수 있는 내용이 되겠습니다. 이번시간에 소개해 드릴 내용은 터치스크린을 사용하는 어플리케이션에서 TextBox등의 Control에 Focus 되었을때 자동으로 Screen Keyboard Application을 실행하는 예제입니다. 동영상을 보시면 쉽게 이해하실수 있습니다.



위 동영상에서는 WIndows에서 기본적으로 제공하는 OnScreenKeyboard를 사용했지만, 이번시간에 소개해 드릴 내용을 응용하면 직접 개발한 Keyboard Application을 사용하실 수도 있습니다. 간단하게 원리를 말씀드리자면 입력가능한 컨트롤 즉, TextBox나 PasswordBox에 Focus 되었을때 미리 지정해놓은 Keyboard Application을 실행하고 Focus를 잃었을때 Keyboard Application을 닫는 원리가 되겠습니다.

컨트롤 하나하나 일일이 Focus이벤트 코드를 추가하는 방법을 사용할수도 있겠지만, 이번시간에 소개해 드릴방법은 Attached DependencyProperty를 사용하여 간단하게 Screen Keyboard를 지원하도록 구현했습니다. 사용할때에는 아래와 같이 사용할 수 있습니다.


아래는 Attached DependencyProperty를 구현한 소스코드입니다.

동작원리는 위에서 설명드린것과 동일하며 Attached Dependency Property를 이해하고 있다면, 어렵지 않게 이해하실수 있을것 같습니다 ^^ 이상으로 이번 포스팅을 마치며 질문의나 문의 사항은 언제든지 연락주시기 바랍니다 ^^ 감사합니다.

소스코드입니다.


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스
WPF2009/05/14 11:09

안녕하세요. 김대욱입니다. 거의 한달만에 포스팅이네요 >_< 포스팅 할 내용을 적어놓은 메모장에는 자꾸 늘어나는데..
현재 진행하고있는 프로젝트 마감때문에 정신이 하나도 없어서 포스팅을 재때 못하고 있습니다 ㅠ_ㅠ 이해해주세요 (굽신굽신)

이번시간에는 얼마전 포스팅에서 소개해드린바있는 Fixed Image Control(http://whatisthat.co.kr/150)를 WPF의 Attatched Dependency Property를 사용하여 어떤 컨트롤에나 적용될 수 있는 PixelSnapper를 구현해 보도록 하겠습니다. 아래는 시연동영상 입니다.



먼저 간단하게 Attatched DependencyProperty에 대해 설명을 드리자면, 우리가 일반적으로 사용하는 Button라는 객체가 있을때 Button에는 Animation이라는 Property가 존재 하지않습니다. 만약 Animation이라는 Property를 추가하고자 한다면 기존에는 Button객체를 상속받아 Animation Property를 포함한 새로운 객체를 생성해주어야했죠. 하지만 WPF에서는 Attatched Property를 사용하여 새로운 객체를 생성할 필요없이 Button객체에 Property를 부여 할 수 있습니다. ( 간단하게 활용면에서만 설명을 한 내용이라 다소 실제 내용과 차이가 있을 수 있습니다.)

원래의 목적은 부모와 자식간의 Dependency Property를 연결짓기 위해 사용되는 방법으로, 대표적인 Grid의 Grid.Row, DockPanel의 DockPanel.Dock가 있으며 이번시간에는 이런 Attatched Dependency Property를 사용하여 어느 컨트롤에서나 적용할 수 있는 Pixel Snapper를 구현 해보고자 합니다. Attatched Dependency Property와 관련된 보다 자세한 내용은 MSDN을 참고해주시기 바랍니다.(http://msdn.microsoft.com/ko-kr/library/ms749011.aspx)

아래는 PixelSnapper의 AttatchedDependency Property를 정의하는 부분입니다.

Attatched DependencyProperty를 사용하기 위해 DependencyProperty를 RegisterAttached 메서드를 사용하여 등록하고, Property에 접근하기 위한 Get,Set메서드를 위와 같이 정의했습니다. 이때 이름은 반드시 Get[PropertyName] , Set[PropertyName]과 같이 구현이 되어야 하며 모든 FrameworkElement에 IsSnap Property를 노출시킬 것이기 때문에 Parameter 로  FrameworkElement를 사용했습니다.

그리고 본격적으로 FrameworkElement의 IsSanp에 따라 객체의 Pixel 고정여부를 지정하기 위해 IsSnap Property가 갱신되었을때 아래와 같은 처리를 해줍니다.

LayoutUpdate의 경우 sender에 null이 들어오기때문에 어떤 객체로부터 호출되었는지를 판단하기 위해 람다식을 이용하여 파라미터로 Target객체를 넘기는 대리자를 생성하여 LayoutUpdate를 호출하게 됩니다. 이외 나머지 소스코드 부분은 대부분 이전에 소개해드릴 Fixed Pixel Control과 동일하므로 설명은 여기까지로 하고, 실제 사용할때에는 아래와 같이 사용하시면됩니다.

[XAML에서의 사용]


[C#에서의 사용]

더 궁금하신점이나 기타 문의는 이메일이나 댓글로 남겨주시면 되겠습니다. 아래는 테스트를 할 수 있는 소스코드입니다.




 

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스