如何获取触发MouseDoubleClick事件的UIElement?

时间:2013-05-23 19:55:18

标签: c# wpf event-handling mouseevent uielement

我正在开发一个简单的IM程序作为个人项目,我遇到了一些障碍。这真的更像是化妆品,但我遇到了一些麻烦。我有一个侧边栏,列出了主窗口中所有用户的内容,我想设置它,以便当用户点击联系人姓名时,在主窗口的聊天区域中打开一个选项卡与该联系人打开的聊天会话。真正重要的部分是让我能够获得UIElement,在本例中是一个Label,它启动了MouseDoubleClick事件。一旦我可以访问它,我就可以访问建立连接所需的信息。不幸的是,我对鼠标事件有点生疏,并且在事件被触发后无法弄清楚如何回到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)
{

}

我是以错误的方式来做这件事的吗?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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 :(得分: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.
    }

答案 2 :(得分:1)

实际上,发件人是您的Label,您只需使用以下内容对其进行转换:

Label contact = sender as Label;

在执行任何进一步操作之前,请务必检查联系人是否为空。