Маршрутизируемые события в wpf

Очень хорошо известен тот факт, что маршрутизируемые события перемещаются только вверх или вниз по предкам, а не через все элементы.

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

Мои вопросы, как, несколько указателей, пожалуйста.

У меня есть XAML, который выглядит как

<Grid Name="MainGrid">
    <Listbox Name="lb1"/>
    <Grid Name="InnerGrid">
       <Listbox Name="lb2"/>
    </Grid>
</Grid>

Обработчики событий мыши, определенные в «lb1», не будут запущены, поскольку они «закопаны» в «InnerGrid». Мой вопрос заключается в том, как я могу написать некоторый код в «MainGrid» или где-то еще, где обработчики событий, определенные в «lb1», запускаются. Или может быть какой-то другой метод достижения этого.

Огромное спасибо.


person Anand Shah    schedule 16.04.2009    source источник
comment
Это может быть глупый вопрос, но почему вы вообще хороните свой lb1 под InnerGrid? ;)   -  person Christian Hubmann    schedule 17.04.2009
comment
Ваш вопрос абсолютно логичен. Вопрос, который я задал выше, похож на сокращение длинной истории. В основном, при разрешении 1024x768 пространство на экране не слишком удобно, и в этой форме есть много элементов управления. :)   -  person Anand Shah    schedule 17.04.2009


Ответы (1)


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

Попробуй это:

В вашем коде в конструкторе после InitializeComponent() вызовите

this.AddHandler(RoutedEvent, Delegate, bool);

Передайте событие (MouseDown или т. д.), делегат для вызова (что-то вроде lb1_MouseDown), а затем true, чтобы указать, что вы хотите, чтобы вас вызывали для событий, которые уже были обработаны.

person Josh G    schedule 17.04.2009