2013-05-23 2 views
0

저는 개인 프로젝트로 간단한 메신저 프로그램을 만들고 있으며, 약간의 걸림돌을 맞았습니다. 정말 화장품 일 뿐이지 만 문제가 있습니다. 메인 윈도우에있는 모든 사용자의 내용을 나열하는 사이드 바가 있습니다. 사용자가 연락처 이름을 클릭하면 메인 윈도우의 채팅 영역에 탭이 열리도록 설정하고 싶습니다. 그 연락처와 연 채팅 세션. 이것의 가장 중요한 부분은 MouseDoubleClick 이벤트를 시작한 Label (이 경우) 인 UIElement를 가져올 수 있다는 것입니다. 액세스 할 수있게되면 연결에 필요한 정보에 액세스 할 수 있습니다. 불행히도 마우스 이벤트에 약간 녹슬었고 이벤트가 시작된 후 Label으로 돌아갈 방법을 알 수 없습니다.MouseDoubleClick 이벤트를 트리거 한 UIElement를 얻으려면 어떻게해야합니까?

foreach (ContactInfo contact in ContactList) 
{ 
    Label currentContact = new Label(); 
    currentContact.Content = contact.ContactName.ToString() + " (" + contact.MachineName.ToString() + ")"; 
    currentContact.MouseDoubleClick += new MouseButtonEventHandler(ContactDoubleClickHandler); 
    StckPnl_Contacts.Children.Add(currentContact); 
} 

을 그리고 (현재 비어 있음) 핸들러가 이것이다 :

public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e) 
{ 

} 

내가 길을 잘못 이것에 대해 건가 다음과 같이 프로그래밍 라벨을 만들 때 내 소스 코드는? 어떤 도움을 주시면 감사하겠습니다.

+0

레이블이 클릭 이벤트를 올바르게 처리하면 100 %가 아닙니다. 그럴 경우 "보낸 사람"매개 변수를 검사하십시오. – wgraham

+0

보낸 사람 만 Equals, GetHashCode, GetType 및 ToString을 제공합니다. 따라서 클릭 이벤트를 제대로 처리하지 못했다고 생각하십니까? –

+1

intellisense를 통해 잘, 예 - 그것은 객체로 정의 되었기 때문입니다. 처리기에 더미 코드를 넣고 중단 점을 설정하지 마십시오. 실제로 보낸 사람 *이 무엇인지 알아보십시오. – wgraham

답변

2

에 액세스하려면 다음 중 하나를 사용할 수 sender 경우 트리거 요소 얻기 위해 (첫 번째 유형으로 캐스팅) :

Label targetLabel = sender as Label; 
if (targetLabel != null) 
{ 
    // Do something. I recommend not doing a direct cast in case someone in the future hooks another control type to the event handler. 
} 
1

당신은 당신이 검사 할 수 있습니다 발신자 정보

public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e) 
    { 
     var uiElement = (UIElement) sender; // cast it to UIElement 
    } 


public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e) 
    { 
     var dp = (DependencyObject) sender; // cast it to dependency object. 
    } 
1

실제로 발신자는 Label이며 다음을 사용하여 변환해야합니다.

추가 작업을 수행하기 전에 연락처가 null인지 확인하십시오.