В WPF, как я могу захватить мышь на холсте и все еще найти то, что управляет курсором? - PullRequest
2 голосов
/ 21 ноября 2010

У меня есть пользовательский элемент управления Canvas (унаследованный от Canvas), наложенный на большую область пользовательских элементов управления.Идея состоит в том, чтобы рисовать пути между пользовательскими элементами управления (т.е. соединительными линиями).

Чтобы зафиксировать движение мыши, я вызываю Mouse.Capture(theCanvas) на MouseDown.Это прекрасно работает, но пользовательские элементы управления под холстом, очевидно, больше не получают события мыши.Mouse.DirectlyOver всегда показывает холст, поэтому я не могу подделать его, посмотрев на текущую позицию и увидев, на каком пользовательском элементе управления он закончился.

Итак, мне все еще нужен холст для рисования путей, но как это сделать?Я решаю это одним из следующих способов:

  1. Заглянуть под Canvas и посмотреть, какой самый верхний элемент управления находится под ним?
  2. Получить этот MouseDown -> Track MouseMoves -> MouseUp workflowработать на холсте без мышиных захватов?

Любые другие идеи приветствуются ...

1 Ответ

0 голосов
/ 21 ноября 2010

Я бы согласился, что это ваши два варианта. Если вы хотите перенаправить только несколько кликов в пользовательские элементы управления, перейдите к варианту 1 и нажмите «Проверить элементы управления под холстом».

Если вам нужно, чтобы ваши пользовательские элементы управления вели себя так, как будто их ничто не покрывает (текстовые поля, кнопки и т. Д.), То я бы порекомендовал использовать событие PreviewMouseMove на родительском элементе управления пользователя, поскольку это может привести к и, необязательно, "обрабатывать" события до того, как элементы управления получат событие, но оно не заблокирует событие, если вы не установили для handled значение true

...