2013-07-11 2 views
1

Мне нужно определить (true или false), если моя мышь находится над определенным типом объекта. Существует один шаблон данных, который используется многими объектами. Мне не нужно ничего из экземпляра объекта, мне просто нужно определить, находится ли моя мышь над этим типом элемента в пользовательском интерфейсе.Как определить, находится ли мышь непосредственно над типом объекта в WPF

Было бы что-то вдоль линий:

If(mouse.DirectlyOver == StorageElementWrapper) 
{ 
... 
} 

EDIT: моя ошибка в том, что я использую мой тип как переменные

ответ

2

Важно отметить, что DirectlyOver весьма вероятно, найти что-то внутри ваш элемент, а не тот элемент, который вы действительно ищете. Чтобы использовать это свойство, вы хотите посмотреть на родительское дерево элемента DirectlyOver. Что-то вдоль этих линий, с FindAncestorOrSelf исходя из this blog post:

if (Util.FindAncestorOrSelf<StorageElementWrapper>((DependencyObject)mouse.DirectlyOver) != null) 
{ 
... 
} 

Или если у вас есть код ссылки на ваши StorageElementWrapper с, (в данном примере, в коллекции с именем myWrappers) и они получают от UIElement, это, вероятно, будет лучший подход, используя IsMouseOver свойство:

if (myWrappers.Any(x => x.IsMouseOver)) 
    // do something 
2

концепция, если вы заинтересованы в конкретном изделии: создать OnMouseOver обработчик для этого конкретного объекта (в качестве альтернативы OnMouseEnter). Как правило, в WPF все работает над этим способом обработки событий, а не обязательно перечисляет и обнаруживает, где находится указатель мыши. Таким образом, этот элемент сам может сказать вам, если мышь над ним. Элемент может иметь общедоступное свойство readonly, которое предоставляет это, и ваш код может просто получить значение этого свойства.

+0

Спасибо, это с помощью коллеги послало меня в правильном направлении. Перетаскивание сделана так просто в WPF, но doDragDrop() не кажется столь же полезным или эффективным, как пользовательский. – meisenman

2

Мне удалось установить событие MouseEnter на границе моего шаблона данных. Этот шаблон привязан к моим объектам. Вместо того, чтобы пытаться определить, если мышь парит над объектом, прежде чем выполнять действие, событие

object_MouseEnter(object sender, MouseEventArgs e) 
{ 
    if(....) 
    else 
} 

выстрелил каждый раз, когда объект был «введен в мышью», и я использовал условные выражения, чтобы решить, как обращаться событие.

Спасибо за предыдущие предложения относительно событий мыши.

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