【发布时间】:2011-02-12 13:43:43
【问题描述】:
我有一个包含一些节点和一些子节点的树视图。在这些子节点中,我为 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;
}
在最顶层,有逻辑驱动器,然后是子文件夹等等。
当我单击子节点(逻辑驱动器中的文件夹)时,sender 参数仍然是本地驱动器,而不是特定的子节点。
当我使用 SelectedItem 而不是 sender 时,它可以正常工作。
【问题讨论】:
标签: wpf