Я строю программно TreeView, добавляя в него элементы. Каждому элементу программно назначаю обработчик двойного щелчка. При двойном щелчке на элементе, который является вложенным, событие происходит (и вызывается обработчик) для него и всех его родителей.
e.Handled = true не помогает, в мсдн так и сказано.
В интернете нормального решения не нашёл. Неужели остается заводить свой флаг и проверять его? Это же костыль.
Кто разбирается, расскажите, почему сделано именно так, и как это правильно обойти.
Здравствуйте, dmitry_npi, Вы писали:
_>Я строю программно TreeView, добавляя в него элементы. Каждому элементу программно назначаю обработчик двойного щелчка. При двойном щелчке на элементе, который является вложенным, событие происходит (и вызывается обработчик) для него и всех его родителей.
_>e.Handled = true не помогает, в мсдн так и сказано.
_>В интернете нормального решения не нашёл. Неужели остается заводить свой флаг и проверять его? Это же костыль.
_>Кто разбирается, расскажите, почему сделано именно так, и как это правильно обойти.
Control authors who want to handle mouse double clicks should use the MouseLeftButtonDown event when ClickCount is equal to two. This will cause the state of Handled to propagate appropriately in the case where another element in the element tree handles the event.
Re[2]: [WPF] DoubleClick всплывает по дереву TreeView
Здравствуйте, Codechanger, Вы писали:
C>Control authors who want to handle mouse double clicks should use the MouseLeftButtonDown event when ClickCount is equal to two. This will cause the state of Handled to propagate appropriately in the case where another element in the element tree handles the event.
Да MSDN-то я читал, и делать так пробовал.
Так еще хуже — событие MouseLeftButtonDown не обрабатывается вообще. В обработчик не заходит. Вот мой код (тестовый):
Здравствуйте, dmitry_npi, Вы писали:
_>Здравствуйте, Codechanger, Вы писали:
C>>Control authors who want to handle mouse double clicks should use the MouseLeftButtonDown event when ClickCount is equal to two. This will cause the state of Handled to propagate appropriately in the case where another element in the element tree handles the event.
_>Да MSDN-то я читал, и делать так пробовал. _>Так еще хуже — событие MouseLeftButtonDown не обрабатывается вообще. В обработчик не заходит. Вот мой код (тестовый):
Ага, хренотень какая-то. Скорее всего криво сделали TreeViewItem. WPF-ный TreeView вообще, конечно, полон загадок, к сожалению.
Что можно сделать. Если MouseDoubleClick возникает во всем дереве, то это, как минимум, позволяет использовать только один обработчик, приатаченный к рутовому узлу дерева. В этом обработчике можно взять e.OriginalSource и пройтись от него по родителям, используя VisualTreeHelper, а встретив TreeViewItem, принять решение, что двойной клик произвели именно на нем. Да, решение не самое приятное, но что поделать.
Re[3]: [WPF] DoubleClick всплывает по дереву TreeView
Здравствуйте, dmitry_npi, Вы писали:
_>Здравствуйте, Codechanger, Вы писали:
C>>Control authors who want to handle mouse double clicks should use the MouseLeftButtonDown event when ClickCount is equal to two. This will cause the state of Handled to propagate appropriately in the case where another element in the element tree handles the event.
_>Да MSDN-то я читал, и делать так пробовал. _>Так еще хуже — событие MouseLeftButtonDown не обрабатывается вообще. В обработчик не заходит. Вот мой код (тестовый):
Здравствуйте, dmitry_npi, Вы писали:
_>Я строю программно TreeView, добавляя в него элементы. Каждому элементу программно назначаю обработчик двойного щелчка. При двойном щелчке на элементе, который является вложенным, событие происходит (и вызывается обработчик) для него и всех его родителей.
_>e.Handled = true не помогает, в мсдн так и сказано.
_>В интернете нормального решения не нашёл. Неужели остается заводить свой флаг и проверять его? Это же костыль.
_>Кто разбирается, расскажите, почему сделано именно так, и как это правильно обойти.
...
TreeViewItem tviSender = sender as TreeViewItem;