BadCats
@BadCats

Создание прикрепляемого события?

Есть строка
sp.AddHandler(Button.Click , new RoutedEventHandler(DoSomething));

- где sp - это StackPanel -
<StackPanel Name="sp" Width="{Binding ElementName=MainGrid, Path=ActualWidth}" Height="{Binding ElementName=MainGrid, Path=ActualHeight}" >

DoSomething - метод обработчик -
private void DoSomething(object sender, RoutedEventArgs e)
        {
            if(e.OriginalSource==BTN)
            {
                BTN.Content = ContentControl.ActualHeightProperty;
            }
        }


- В строке
sp.AddHandler(Button.Click , new RoutedEventHandler(DoSomething));
- возникает ошибка - ругается на
Button.Click -
Ошибка CS0120 Для нестатического поля, метода или свойства "ButtonBase.Click" требуется ссылка на объект.

Но как я смогу передать ссылку на объект если Button.Click - это событие - разве что подписать к нему на делегат
- т.е что-то вроде такого
sp.AddHandler(Button.Click+= new RoutedEventHandler(), new RoutedEventHandler(DoSomething));


Но вот тут Button.Click+= new RoutedEventHandler()
- RoutedEventHandler() - тоже требует метод для обработки - и тогда уже получается сильное загромождение (я к тому, что я занимаюсь по туториалам в интернете и там просто конструкция вида
sp.AddHandler(Button.Click , new RoutedEventHandler(DoSomething));
) - т.е просто на классе-объекте Button вызывается событие Click и передается в качестве первого параметра AddHandler)

По - сути смотря на выдаваемую ошибку
Ошибка CS0120 Для нестатического поля, метода или свойства "ButtonBase.Click" требуется ссылка на объект.

-как я понял компилятор хочет ссылку на ту кнопку на которую нажали - т.е тогда я должен подрисать событие
Button.Click
каким то таким образом :
sp.AddHandler(Button.Click += new RoutedEventHandler(retBTN), new RoutedEventHandler(DoSomething));
     

        private Button retBTN(object sender, RoutedEventArgs e)
        {
            return (Button)sender ;
        }
- но тогда компилятор ругается на то, что retBTN -имеет неправильный возвращаемый тип - видимо не соответствует сигнатуре класса-делегата RoutedEventHandler. И вот что делать дальше я не знаю.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
twobomb
@twobomb
Может так?
sp.AddHandler(Button.ClickEvent, new RoutedEventHandler((o,e)=>{
                Console.WriteLine("test");
            }));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы