У меня есть древовидная структура с некоторыми узлами и некоторыми подузлами. В этих подузлах я прикрепил обработчик событий для 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;
}
На самом верхнем уровне находятся логические диски, а затем подпапки и т. Д.
Когда я щелкаю подузел (папки в логических дисках), параметр отправителя остается локальным диском, а не конкретным подузлом.
Работает нормально, когда я использую SelectedItem вместо отправителя.