요즘 윈폰 개발을 하면서 Touch.FrameReported 를 사용 하게 되었는데요.
Touch 이벤트 문제? 라기 보다는 불편한 점이 있어서 포스팅을 해볼까 합니다.
우성 상황을 설명 드리겠습니다.
우선 유저컨트롤
<구조>
<생긴 모양>
참 단순하죠 –_-;; 그냥 테스트일 뿐이닌까요.
자 그럼 저 컨트롤을 넣은 상태를 확인해 볼까용
따라라~♬
그리고 앞에서 말했던 Touch.FrameReported 이벤트를 받아서 저기 녹색 사각형 부분을 클릭 터치해 보겠습니다.
BreakPoint를 걸어놓고 핸들러에서 다음에 값을 확인해 보면
두둥~~ 사각형 입니다.
네 그렇습니다. 저는 사실 저 사각형 하나를 클릭 하려고 했던게 아니라 저 이상하게 생긴 유저컨트롤을 선택 하고 싶었습니다.
그래서 제가 했던 방법은 !!
일단 제가 저 컨트롤의 구조를 알기 때문에
부모에 부모에 부모를 찾으면 해당 컨트롤이 나온다는 걸 알고 그렇게 유저컨트롤을 찾아냈습니다.
아아~~ 하지만 세상은 호락호락 하지 않았습니다.
드자이너분이 저 중간에 있는 그리드를 보더니
“어라 이건 필요 없잖아 지워 버려야지”
라며~ 그리드를 지워 버리는 바람에 부모에 부모에 부모가 아니라 부모에 부모가 유저 컨트롤이 되어 버렸습니다.
저의 코드는 멍텅구리가 되어 버렸습니다 Orz
그래서 간단한 함수를 하나 만들었습니다.
자 일단 보시죵 –_-)b
public static T
GetControl<T>(FrameworkElement
element)
{
if (element == null)
{
return (T)(object)null;
}
if (element.Parent == null)
{
if (VisualTreeHelper.GetParent(element)
== null ||
VisualTreeHelper.GetParent(element).GetType()
!= typeof(T))
{
return
(T)(object)null;
}
return (T)(object)VisualTreeHelper.GetParent(element);
}
if (element.Parent.GetType() == typeof(T))
{
return (T)(object)element.Parent;
}
else
{
return
GetControl<T>(element.Parent as FrameworkElement);
}
}
와~ 몇 줄 안된당 Orz..
머 코드 내용은 보시면 아실것 같구요. 암튼 저는 일단 저렇게 해서 제가 필요한 컨트롤을 찾아 내고 있는데요.
좋은 방법 있으시면 알려주세용 굽신굽신