У меня есть кнопки управления, которая требует добавления обработчика к корню:Удаление дополнительного обработчика в отдельный элемент управления?
Application.Current.RootVisual.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(RootClicked), true);
Проблема заключается в том, что, когда я делаю это RootVisuual UIElement никогда не уничтожает себя из-за ссылки создается.
Есть ли способ проверить, когда RootVisual больше не виден, поэтому я могу разыменовать связанное с ним событие или хотя бы каким-то другим способом динамически удалить дескриптор?
Я пытался смотреть в слабых событий, но классы для реализации, что не существует в Silverlight ..
С WeakReferences Я попытался следующие:
m_clickEventHandler = new MouseButtonEventHandler(RootClicked);
m_weakRefToRoot = new WeakReference(Application.Current.RootVisual);
(m_weakRefToRoot.Target as UIElement).AddHandler(UIElement.MouseLeftButtonDownEvent, m_clickEventHandler, true);
В какой ситуации внешний вид корня не может быть видимым. это после того, как программа ушла, что ее еще не освобождает память? – tam
Корневой визуал - это страница входа в систему, как только пользователь регистрируется на странице входа в систему, должен быть удален и удален, если только я не добавил к нему обработчик. Поэтому мне нужен способ удалить обработчик, чтобы GC знал, чтобы восстановить страницу входа. – tweetypi
Вы пытались отказаться от подписки на дескриптор в незагруженном событии? – tam