Как да получите контрол с по-нисък zindex при щракване с мишката в wpf?

Имам няколко контроли в едно и също платно и може един да бъде покрит от друг. Всички те са с един и същ zIndex, но за реда на зареждане, някои са нагоре, а други надолу. Моят въпрос, ако Acontrol е над Bcontrol и щракам върху тях, но само A получава събитието click. Как мога да накарам B също да получи събитието? Благодаря.


person Cuero    schedule 11.04.2012    source източник
comment
опитвали ли сте да настроите обработеното свойство във вашето MouseClick събитие на false?   -  person Dominik    schedule 11.04.2012


Отговори (2)


Ако искате само този отзад да получи събитието, тогава за всички контроли пред първия, трябва да зададете IsHitTestVisible = False за този отзад, за да получите събитието - но това не е това, което искате.

Ако искате всички те да получат събитието, помислете за целия потребителски интерфейс като дърво от елементи. Всички тези контроли, за които говорите, са братя и сестри. Когато се щракне върху нещо, родителят е първият, който получава известие и ако не обработи щракването, то се предава на видимия дъщерен елемент на този родител в тази позиция на мишката и така нататък, докато не бъде обработен. Единственият ви начин да попречите на детето, което е щракнато, да обработва щракването с мишката, е да накарате общия родител на всички братя и сестри да обработи събитието първи.

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

person Alain    schedule 11.04.2012

Няма шанс. Дори ако маркирате MouseClick като необработен, той ще насочи към родителски елемент (Canvas), а не към брат. Единственият начин е тестване на хитове. Когато потребителят щракне върху Acontrol, трябва да тест за попадение, за да определите дали друг контролът е под него.

Трябва да използвате hit-test с обратни извиквания. Това ви позволява да пропуснете Acontrol, за да намерите Bcontrol. Ако го намерите, можете да третирате Bcontrol като кликнат.

person Marat Khasanov    schedule 11.04.2012