TreeViewItem MouseDoubleClick未在事件处理程序中证明正确的发件人

时间:2011-02-12 04:26:04

标签: wpf

我有一个带有一些节点和一些子节点的树视图。在这些子节点中,我为MouseDoubleClick附加了一个事件处理程序。

但是在事件处理程序中,sender参数指的是父节点,而不是我双击的子节点。

private void Window_Initialized(object sender, EventArgs e)
{

    string[] drives = System.Environment.GetLogicalDrives();
    foreach (string drive in drives)
    {
        TreeViewItem node = new TreeViewItem(){Header=drive,Tag=drive};
        TreeViewFolders.Items.Add(node);
        node.MouseDoubleClick+=new MouseButtonEventHandler(rootUI_MouseDoubleClick);
    }
}

void rootUI_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    TreeViewItem node = sender as TreeViewItem;
    node.Items.Clear();
    string folder = ((TreeViewFolders.SelectedItem as TreeViewItem).Tag) as string;

        try
        {
            DirectoryInfo[] subDirectories = new DirectoryInfo(folder).GetDirectories();
            foreach (DirectoryInfo sd in subDirectories)
            {
                TreeViewItem subnode = new TreeViewItem() { Header = sd.Name,Tag=sd.FullName};
                node.MouseDoubleClick += new MouseButtonEventHandler(rootUI_MouseDoubleClick);
                node.Items.Add(subnode);
            }
        }
        catch
        {
        }
        e.Handled = true;
}

在最顶层,有逻辑驱动器,然后是子文件夹,等等 Whesn我单击子节点(逻辑驱动器中的文件夹),sender参数仍然是本地驱动器,而不是特定的子节点。

当我使用SelectedItem而不是发件人时,它工作正常。

1 个答案:

答案 0 :(得分:0)

您的代码将另一个双击处理程序添加到双击处理程序触发的同一节点上。也许您打算为子节点双击添加处理程序?