본문 바로가기

WindowPhone/Silverlight

내 마음대로 TouchHelper~

요즘 윈폰 개발을 하면서 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..

머 코드 내용은 보시면 아실것 같구요. 암튼 저는 일단 저렇게 해서 제가 필요한 컨트롤을 찾아 내고 있는데요.

 

좋은 방법 있으시면 알려주세용 굽신굽신