0

我正在开发一个简单的 IM 程序作为个人项目,但遇到了一些障碍。这实际上更像是一种化妆品,但我遇到了一些麻烦。我有一个侧边栏,在主窗口中列出了所有用户的内容,我想对其进行设置,以便当用户单击联系人姓名时,会在主窗口的聊天区域中打开一个选项卡与该联系人打开的聊天会话。对我来说,真正重要的部分是能够获取启动 MouseDoubleClick 事件的 UIElement(在本例中为标签)。一旦我可以访问它,我就可以访问建立连接所需的信息。不幸的是,我对鼠标事件有点生疏,一旦事件被触发,我不知道如何返回标签。

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)
{

}

我会以错误的方式解决这个问题吗?任何帮助,将不胜感激。

4

3 回答 3

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.
}
于 2013-05-23T20:03:38.207 回答
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.
    }
于 2013-05-23T20:01:42.933 回答
1

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

Label contact = sender as Label;

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

于 2013-05-23T20:03:53.150 回答