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