@Quttar72
Изучаю asp.net core mvc

Как вызвать событие в WPF?

Кратко расскажу что я делаю: есть Canvas, на котором размещаются пользовательские элементы baseBlock. Суть проста, эти блоки нужно двигать по этому Canvas. Я решил, что baseBlock должны посылать определенные события, где в Sender собственно указан блок, а в качестве параметров должен передаваться объект класса унаследованного от RoutedEventArgs, где будут свойства указывающие на сколько нужно переместить блок. А там уже с помощью Canvas.SetLeft, Canvas.SetTop, вобщем-то понятно.

В данной статье указанно как создавать событие, но вот как это событие вызвать? Пробовал, через Invoke, у события, но (я признаться и с обычными событиями почти не работал, а тут еще и усложненные события WPF) такой способ не работает:
CapturedMove?.Invoke(this, new RoutedEventArgs());
Это вот тот код который я добавил в класс BaseBlock:
public static readonly RoutedEvent CapturedMoveEvent;

static BaseBlock()
{
    // регистрация маршрутизированного события
    BaseBlock.CapturedMoveEvent = EventManager.RegisterRoutedEvent("CapturedMove", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(BaseBlock));
    //................................
}

public event RoutedEventHandler CapturedMove
{
    add
    {
        // добавление обработчика
        base.AddHandler(BaseBlock.CapturedMoveEvent, value);
    }
    remove
    {
        // удаление обработчика
        base.RemoveHandler(BaseBlock.CapturedMoveEvent, value);
    }
}
  • Вопрос задан
  • 308 просмотров
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
События - это специальный тип делегата (Ссылка на метод или функцию) которая исполняется при каком-то действии
Для создания события для baseBlock (Если это пользовательский класс), нужно в этом классе описать делегат, который будет принимать необходимые параметры, типа sender и RountedEventArgs.
Далее в классе нужно описать экземпляр на этот делегат, типа так:

public delegate returnValue DelegateName(Params param);
event DelegateName eventHandlerName;


Далее, сама суть в том, что при выполнении некоторых действий, по типу, когда вызывается какой-то метод, допусти, для вывода состояния объекта либо класса, тогда в этом методе должно вызываться это событие, так как оно будет указывать на то, что был вызван именно этот метод.
Суть событий как раз таки в том, что бы отслеживать вызов методов и всё. Этот делегат должен инициализироваться снаружи класса, т.е., то, что будет делаться при вызове события, будет определяться непосредственно пользователем, так как и с обычными событиями для Click, когда действия, которые будут выполняться, определяет именно программист.

Для более детального изучения (Если метанит, значит метанит )) ) ссылку прилагаю ниже
https://metanit.com/sharp/tutorial/3.14.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы