Есть строка
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. И вот что делать дальше я не знаю.