2012-04-26 5 views
8

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

+0

Вы нашли ответ на свой вопрос? –

ответ

0

Когда пользователь перетаскивает что-то, мышь «захвачена» в этот момент, а события мыши не отправляются на элементы управления, которые проходит мышь. Только элемент управления, который фактически «захватил мышь», получает события мыши. Таким образом, вам нужно обрабатывать эти события там. Это должно быть легко. Если у вас возникли проблемы, не стесняйтесь пишите мне с помощью некоторого образца кода, и я проверю его для вас. Лучший из пожеланий.

0

Я знаю, что это задавали несколько лет назад, но на всякий случай кто-то приземляется здесь из поисковой системы (как и я), вот как я решил проблему для себя. Вместо того чтобы использовать IsMouseOver свойства, используйте хит-тестирование в вашем коде, чтобы определить, если указатель мыши находится внутри элемента управления:

bool IsMouseOverEx = false; 

VisualTreeHelper.HitTest(this, d => 
{ 
    if (d == this) 
    { 
    IsMouseOverEx = true; 
    return HitTestFilterBehavior.Stop; 
    } 
    else 
    return HitTestFilterBehavior.Continue; 
}, 
ht => HitTestResultBehavior.Stop, 
new PointHitTestParameters(Mouse.GetPosition(this))); 

if (IsMouseOverEx) 
{ 
    //Do whatever you need in case of MouseOver 
} 

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

Смежные вопросы