Два перекрывающихся элемента управления получают одно и то же событие нажатия? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть сетка с двумя перекрывающимися пользовательскими элементами управления:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <ControlA Grid.Row="0" Grid.Column="1"
              Grid.RowSpan="2"
              Canvas.ZIndex="1"
              Background="Transparent"/>
    <ControlB Grid.Row="1" Grid.Column="0"
              Grid.ColumnSpan="2"/>
</Grid>

Оба имеют поведение щелчка и прокрутки и слушают события MouseDown / MouseWheel, ControlB также имеет собственный VisualTree с дочерними элементами управления, которые должны получать эти туннелирование ивсплывающие события (ControlA довольно проста, но все еще нуждаются в этих событиях).

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

Я пытался перехватить Preview-Events и делегировать их дочерним элементам управления, но до сих пор я не нашел способа, который бы не привел ни к чему.поведение вообще или StackOverFlow.

//Does not work
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        ControlA.RaiseEvent( new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left){RoutedEvent = MouseDownEvent} );
        ControlB.RaiseEvent( new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left){RoutedEvent = MouseDownEvent} );
    }

Нужно ли вручную реализовывать VisualTreeHelper.HitTest() и проходить визуальное дерево?Нужно ли обнулять фон ControlA как ноль и форсировать события для него (поскольку в нем отсутствует дочернее VisualTree), в то время как ControlB может использовать обычное туннелирование и пузыри?

Как я могу отправлять события в естественном режиме?способ (поэтому никакие принудительные команды полностью не заменяют систему событий) на оба элемента управления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...