Нажмите событие для элементов управления под другими элементами управления

StackOverflow https://stackoverflow.com/questions/3158339

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть два элемента управления A и B. Control B помещают через A. Если B нажат только, только он нажал событие, однако мне нужна событие Click of A для огня. Может ли это как-то реализовать с использованием маршрутизируемых событий?

Вот скриншот элементов управления:

Alt Text http://www.imagebanana.com/img/hu5znv4/buttons.png.png.

Конечно, этот случай - это просто уменьшенный пример, я ищу общего способа поднять события на всех элементах управления под курсором мыши / в одном месте. Хоува, бетонное решение этой проблемы поможет мне тоже! Большое спасибо за любой намек!

Это было полезно?

Решение

Это может произойти, если обработчик события внутреннего контроля устанавливает свойство E.chandled для True. Это позволит дальше предотвратить маршрутизируемое событие от пузыринга. Но я только что проверил, и я не вижу этого поведения в WPF 4.

Если e.chandled предотвращает ваше мероприятие, то, что вы можете сделать, это использовать Uilement.addhandler. Перегрузка, которая принимает параметр Boolean Handledeventstoo, чтобы подключить событие вашего клика. Это должно быть сделано в коде, а не на разметке. Затем вы должны получить событие Click во внешнем элементе управления, и свойство e.chandled уже будет установлено значение true.

Следующий код устанавливает фоном обеих кнопок, когда я нажимаю кнопку внутренней части.

<Grid>
    <Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
        <Button Width="100" Height="25" Margin="20" Click="Click2" />
    </Button>
</Grid>

Кодировать позади

private void Click1( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Blue );
}

private void Click2( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Red );
    //e.Handled = true; // uncomment to stop bubbling
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top