Виртуальная MouseButtonEventHandler в моей DLL переопределена из вызывающего приложения - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть библиотека классов, которая динамически создает метку в сетке

public class Class1
{
        public virtual event System.Windows.Input.MouseButtonEventHandler label_event;

        public Class1(Grid _grid)
        {
            Label l = new Label();
            l.Content = "label";
            l.Cursor = System.Windows.Input.Cursors.Hand;
            Grid.SetColumn(_grid, 0);
            Grid.SetRow(_grid, 0);
            _grid.Children.Add(l);

            l.MouseLeftButtonUp += label_event;
        }
}

Из другого приложения этот класс создается

Class1 class1 = new Class1(grid);
class1.label_event += l_MouseLeftButtonUp;
...
void l_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
       Title = sender.ToString();
}
...

Компиляция происходит без ошибок, но после выполнения естьошибка в l.MouseLeftButtonUp + = label_event; «Не может быть пустым»

Как переопределить событие мыши?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы должны вызвать событие в Class1, а затем обработать его в классе потребления:

public class Class1
{
    public event System.Windows.Input.MouseButtonEventHandler label_event;

    public Class1(Grid _grid)
    {
        Label l = new Label();
        l.Content = "label";
        l.Cursor = System.Windows.Input.Cursors.Hand;
        Grid.SetColumn(_grid, 0);
        Grid.SetRow(_grid, 0);
        _grid.Children.Add(l);

        l.MouseLeftButtonUp += (s,e) => label_event?.Invoke(this, e);
    }
}
...