[英]How do I get the UIElement that triggered a MouseDoubleClick Event?
我正在作為個人項目開發一個簡單的IM程序,但遇到了一些麻煩。 實際上,這實際上是一件裝飾性的事情,但是我遇到了一些麻煩。 我有一個側邊欄,它在主窗口中列出了用戶的所有內容,並且我希望對其進行設置,以便在用戶單擊聯系人姓名時,在主窗口的聊天區域中打開一個選項卡,其中包含與該聯系人打開的聊天會話。 對於我來說,真正重要的部分是能夠獲取啟動MouseDoubleClick事件的UIElement(在本例中為Label)。 一旦可以訪問它,就可以訪問建立連接所需的信息。 不幸的是,我對鼠標事件有些生疏,無法弄清楚一旦事件被觸發后如何回到Label。 我以編程方式創建標簽的源代碼如下:
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)
{
}
我會以錯誤的方式處理嗎? 任何幫助,將不勝感激。
您可以檢查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.
}
您可以使用以下任一方式訪問發件人詳細信息
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.
}
實際上,發件人是您的Label
,您只需要使用以下方法進行轉換:
Label contact = sender as Label;
但是,在執行任何進一步的操作之前,請務必檢查contact是否為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.