TreeViewItem MouseDoubleClick не доказывает правильность отправителя в обработчике событий - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть древовидная структура с некоторыми узлами и некоторыми подузлами. В этих подузлах я прикрепил обработчик событий для 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 вместо отправителя.

1 Ответ

0 голосов
/ 12 февраля 2011

Ваш код добавляет еще один обработчик двойного щелчка к тому же узлу, на котором запущен обработчик двойного щелчка. Возможно, вы хотели добавить обработчик для двойного щелчка по узлу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...