WPF - захват события из элемента управления, который не находится сверху - PullRequest
1 голос
/ 17 ноября 2011

У меня есть приложение WPF, над которым я работаю, где есть кнопка, которая скрыта частично непрозрачным наложением прямоугольника.Кнопка все еще видна, но она не может получать какие-либо события, потому что все они перехвачены прямоугольником, который находится над ней.

Есть ли способ установить проход, чтобы событие получалосьследующим визуальным элементом внизу?Если нет, то есть ли какой-нибудь другой обходной путь, который можно использовать в этой ситуации?

Ответы [ 4 ]

2 голосов
/ 17 ноября 2011

Установить IsHitTestVisible = "false" для непрозрачного наложения.

0 голосов
/ 14 декабря 2011

Я бы порекомендовал просматривать перенаправленные события в WPF.Маршрутизируемые события маршрутизируются в основном на основе визуального дереваМаршрутизированные события поддерживают RoutingStrategy Bubble, Tunnel или Direct.

Общие сведения о перенаправленных событиях и командах в WPF

0 голосов
/ 17 ноября 2011

Вы можете добавить свое собственное событие к событию прямоугольника (или в событии щелчка прямоугольника само по себе) и проверить, есть ли оно в области кнопок

Rectangle.Click += your_click_event;
private void your_click_event(object sender, RoutedEventArgs e)
{
 //check if it's coordinates are within the underlining button.
 //fire button click event

}

Но было бы удобнее установить

 IsHitTestVisible="False"

Как упомянуто в других сообщениях. UIElement.IsHitTestVisible Property

0 голосов
/ 17 ноября 2011

Вам необходимо установить IsHitTestVisible = "False" для контроля над вашей кнопкой.

В этом примере показано, что кнопка закрыта границей, но граница не получает никакого события, поскольку из-заIsHitTestVisible = "Ложное" условие границы:

<Grid Background="Yellow">
    <Button Click="Button_Click" Width="100" Height="25"/>
    <Border Background="Cyan" Opacity="0.4" Width="200"  Height="200" IsHitTestVisible="False" />
</Grid>

код C #,

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("iiiiiii");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...