簡體   English   中英

如何獲取觸發MouseDoubleClick事件的UIElement?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM