В WPF эта линия течет? - PullRequest
       11

В WPF эта линия течет?

1 голос
/ 13 февраля 2009

Утечка этой строки, если мы удалим TextBox из визуального и логического дерева? Для меня это утечка, потому что Mouse.MouseDown имеет ссылку на myHandler и ничего не сделано для удаления обработчика.

<TextBox Mouse.MouseDown="myHandler" />

Я не уверен, потому что этот код является обычной практикой.

1 Ответ

2 голосов
/ 13 февраля 2009

Утечка? Этот XAML преобразуется непосредственно в следующий код (см. Файл Window1.g.cs, созданный в каталоге obj)

((System.Windows.Controls.TextBlock)(target)).AddHandler(System.Windows.Input.Mouse.MouseDownEvent, new System.Windows.Input.MouseButtonEventHandler(this.TextBlock_MouseDown));

Итак, в действительности мы добавляем ссылку «this» (в моем случае это экземпляр Window1) в TextBlock. Синтаксис, который вы видите в XAML, на самом деле является синтаксисом присоединения обработчика RoutedEvent для Routed Events или Attached Events. Просто так получается, что синтаксис выглядит так, будто вы назначаете какую-то ссылку. Взгляните на это: Обзор маршрутизируемых событий и Обзор вложенных событий .

Редактировать: В заключение, он не протекает. :)

Edit2: Если у вас есть какая-либо ссылка на TextBlock, это будет утечка. Но если вы отключите TextBlock, убедитесь, что больше нет ссылок на элемент, все будет в порядке.

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