Я бы сказал, что очень простой и эффективный способ решения этой проблемы - использовать интерфейс INotifyPropertyChanged для использования Observer-Pattern.
Пусть контейнер, который запускает начальное событие, будет наблюдаемой частью, и пусть два других наблюдают за этим. Поэтому всякий раз, когда наблюдаемый контейнер что-то делает (например, запускает событие щелчка), другие получают информацию и могут соответствующим образом реагировать.
Как только ваш класс OutsideContainer станет видимым, выполните следующие два шага:
В классе OutsideButton срабатывает событие PropertyChanged в подходящем месте (например, где происходит «супер» -клик.
В классе ImageFade и ButtonFace выберите событие PropertyChanged и сделайте что-нибудь (например, дайте им запустить свое собственное событие click).
Попробуйте следующее:
В файле с выделенным кодом OutsideBoard.cs реализует интерфейс INotifyPropertyChanged, чтобы сделать его видимым:
class OutsideBoard : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyChanged (string property) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
// the click- EventHandler of your UserControl
public event Click_EventHandler (object sender, RoutedEventArgs e) {
// your clicking code of your UserControl
FirePropertyChanged("SuperClick");
}
// rest of the code inhere ...
}
Теперь каждый класс, который хочет наблюдать класс OutsideBorder, должен реализовать EventHandler для этого класса:
Напишите что-то вроде следующего в вашем классе ButtonFade и ImageFade:
outsideBorder.PropertyChanged += PropertyEventChangeHandler(MyClickHandling);
public void MyClickHandling (object sender, PropertyChangeEventArgs e) {
// do something
}
Таким образом, всякий раз, когда класс OutsideBoard запускает событие PropertyChanged, все наблюдатели будут получать уведомления, вызывая их метод MyClickHandling.
Надеюсь, это поможет вам.