Как мога да накарам IsMouseOver да не се интересува от други неща, прикриващи контрола?

Използвам свойството IsMouseOver често в моята WPF програма. За съжаление имам други визуални елементи от други клонове на визуалното дърво, които понякога покриват моите контроли. Когато скрият моите контроли, IsMouseOver става невярно на моите контроли, дори когато мишката ми е върху скрития контрол.

Как може контролата ми да има свойство като IsMouseOver, което не се интересува дали е покрито в местоположението на курсора? Като тест за удар, който може да тунелира хвърли капаци.

Разгледах това решение, но не мисля, че мога да го използвам, защото основно използва запитване всеки път, когато мишката се движи. Мисля, че това би забавило програмата ми значително, защото моето визуално дърво е обширно.

Имайте предвид, че визуалните елементи, които покриват моите контроли, не са деца на моите контроли.

Редактиране: Задаването на IsHitTestVisible на false за елемента, който прави покритието, би било много хубаво решение, но когато го направя, покриващият елемент изобщо не взаимодейства с мишката. Имам нужда както от покриващи, така и от покриващи елементи, за да реагират на мишката.


person davidbludlow    schedule 08.08.2013    source източник
comment
Трябва ли другите неща, покриващи контрола, да се грижат за мишката?   -  person McAden    schedule 09.08.2013
comment
Ако има нещо, което покрива контролата, мишката не може да бъде над контролата, защото е над другата контрола.   -  person sa_ddam213    schedule 09.08.2013
comment
@sa_ddam213 Метафора: Мобилният ми телефон стои на бюрото ми. Следователно телефонът ми е както над бюрото, така и над пода.   -  person davidbludlow    schedule 09.08.2013
comment
Мислете за мишката като за очите си, не можете да видите бюрото през телефона и не можете да видите пода през бюрото. Звучи сякаш трябва да мислите за нещо друго освен събития IsMouseOver, само едно нещо може да бъде директно под мишката наведнъж   -  person sa_ddam213    schedule 09.08.2013
comment
Вероятно трябва да използвам нещо различно от IsMouseOver събития. Все пак искам да използвам нещо подобно. Много от моите контроли трябва да променят външния си вид, когато мишката се задържи над тях. За съжаление неща като големи прозрачни наслагвания и декорации за избор с пунктирани линии понякога покриват част от моите контроли. Когато мишката задържи над тези неща, IsMouseOver става невярно и основният контрол се променя, за да изглежда така, сякаш мишката не задържа над него. Изглежда зле и объркващо.   -  person davidbludlow    schedule 09.08.2013


Отговори (1)


Направете покриващия контрол невидим за Hit Testing, като зададете IsHitTestVisible="False"

<Grid>
  <Control1/>

  <!-- Control2 will visually "cover" Control1, but mouse events will "pass thru" To Control1 -->
  <Control2 IsHitTestVisible="False"/>
</Grid>
person Federico Berasategui    schedule 09.08.2013
comment
Това е чудесно решение на въпроса, който първоначално написах. За съжаление не ми се получава. Редактирах първоначалния си въпрос, за да включа описание защо не мисля, че работи за мен. - person davidbludlow; 10.08.2013