Как UserControl может вызвать событие SelectionChanged для окна?

#c# #.net #wpf

#c# #.net #wpf

Вопрос:

Я хочу создать пользовательский элемент управления ColorPicker и поместить его в окно.

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

Ответ №1:

Ваш пользовательский элемент управления выбора цвета должен реализовать событие, которое возникает каждый раз, когда пользователь нажимает на один из прямоугольников пользовательского элемента управления. Если вы не знаете, как реализовать событие, просто прокомментируйте этот ответ, и я приведу вам пример.

Вот пример: вы объявляете свои собственные аргументы события (если необходимо), чтобы предоставить некоторую информацию в событии:

 class RectangleClickedEventArgs : EventArgs
{
    public int SomeValue { get; set; }
}
  

В вашем usercontrol вы объявляете событие:

 public event EventHandler<RectangleClickedEventArgs> RectangleClicked;
  

В некоторых условиях вы вызываете событие таким образом (потокобезопасный способ:

 var temp = RectangleClicked;
if (temp != null)
{
    var e = new RectangleClickedEventArgs{ SomeValue = 42};
    temp(this, e);
}
  

В вашей форме вы подписываетесь на событие:

 userControl.RectangleClicked  = OnRectangleClicked;
  

И в процедуре события вы выполняете желаемое действие:

 private void OnRectangleClicked(object sender, RectangleClickedEventArgs e)
{
    // Do what you want to do
}
  

Надеюсь, это поможет…

Комментарии:

1. Я не знаю, как это сделать, пожалуйста, приведите мне пример =)

2. Поскольку вопрос касается WPF, вероятно, было бы лучше использовать маршрутизируемое событие вместо простого события CLR.

3. @JoeWhite: это факт, который я перечитал … (at) Сева: Если вам нужен пример для маршрутизируемых событий, просто дайте комментарий