0

Windows Phone 7.1 (7.5) 앱에서 작업하고 있습니다. 아이디어 : 응용 프로그램은 서버에서 데이터 목록을 가져 와서 각각에 대해 TextBlock을 만들고 각각에 대해 Tap 이벤트 처리기를 적용합니다. 문제 : 모든 요소에 대해 하나의 처리기 만 사용할 수 있으므로 보낸 사람을 식별하는 방법은 무엇입니까?동적으로 생성 된 요소의 이벤트 처리기

새로운 TextBlock을 생성하는 부분

(참고 : itemsAdded는 외부 변수이다, 즉 적절한 마진을 설정할 수있다)

void addInfoItem(string text) 
    { 
     Thickness tempThick = fatherText.Margin; 
     tempThick.Top += itemsAdded * 58; 
     itemsAdded++; 
     TextBlock temp = new TextBlock() { Text = text, FontSize = 40, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = tempThick }; 
     temp.Tap += whenTapped; 
     ContentPanel.Children.Add(temp); 
    } 

whanTapped 이벤트 핸들러 :

private void whenTapped(object sender, RoutedEventArgs e) 
    { 
     //how to identify the sender? 
    } 

때 디버깅 " 객체 발신자 "는 보낸 사람을 식별 할 수있는 충분한 정보를 제공합니다. TextBlock의"Text "속성이지만 코딩하는 동안"object sender "에서 가져온 것은 Equals, GetHashCode, GetType, ToString입니다. (ToString은 일반적으로 이것이 TextBlock이라는 것을 말해줍니다.

답변

2

하지만 코딩시 다음 내가 "개체를 보낸 사람"에서 얻을 전부입니다 :
이 같음, GetHashCode, GetType을, ToString.

Object은 이러한 메소드 만 지원하며 모두 (거의) 상위 클래스입니다. 및 부모 클래스는 자식 클래스 memebrs를 포함/보유 할 수 있지만 자식 유형에 캐스트하지 않으면 자식 멤버에 액세스 할 수 없습니다.

개체이므로 sender 개체를 사용할 수 있지만 해당 구성원을 호출하려면 컨트롤 TextBlock에 캐스팅해야합니다.

TextBlock temp = (TextBlock) sender; 
temp.Invi=okeSomething(); //now you can invoke `TextBlock` memebrs 
+0

감사 (10 분에 올바른 답으로 =) 야 마크를 작동 말한다 내가 할 수 아직) –

+0

@IgnasLaukineitis : 그것은 내 모든 특권입니다. –