繁体   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