Была ли эта функция доступна в предыдущем .NET - PullRequest
0 голосов
/ 15 января 2012

Я смотрю на некоторый код из Чарльза Петцольда , он использует следующий синтаксис для PropertyChangedCallback

public static readonly DependencyProperty CenterProperty =
  EllipseGeometry.CenterProperty.AddOwner(
    typeof(CenteredEllipse),
    new FrameworkPropertyMetadata(new Point(0, 0), 
      EllipsePropertyChanged));

Это не сработает, если вы сделаете это таким образом, выНужно поставить свойство измененного обратного вызова в новом new PropertyChangedCallback(EllipsePropertyChanged).Он также редактирует переменные напрямую:

 void EllipsePropertyChanged(DependencyPropertyChangedEventArgs args)
{
  elipGeo.Center = Center;
  elipGeo.RadiusX = RadiusX;
  elipGeo.RadiusY = RadiusY;
  InvalidateMeasure();
}

Должно ли это быть примерно так:

static void EllipsePropertyChnaged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        EllipseGoemetry ellipseGeo = (EllipseGoemetry )obj;
        args.newValue ...
    }

Кто-нибудь знает, что происходит?

Ответы [ 3 ]

1 голос
/ 15 января 2012

elipGeo определяется как поле класса, этот код является правильным.

Вам не нужно детально создавать делегаты из методов, что делается неявно, эта функция была добавлена ​​в C # 2.0.

1 голос
/ 15 января 2012

Дело в том, что он использует одинаковые имена для двух методов, поэтому он может запутаться:

static void EllipsePropertyChanged(DependencyObject obj,
  DependencyPropertyChangedEventArgs args)
{
  (obj as CenteredEllipse).EllipsePropertyChanged(args);
}

void EllipsePropertyChanged(DependencyPropertyChangedEventArgs args)
{
  elipGeo.Center = Center;
  elipGeo.RadiusX = RadiusX;
  elipGeo.RadiusY = RadiusY;
  InvalidateMeasure();
}

Первый - делегат, второй - просто методкласса, который он вызывает в делегате, где он разыгрывает объект obj, как и положено.

1 голос
/ 15 января 2012

Первый пример вывода типа делегата. Из этого: http://blogs.msdn.com/b/noahc/archive/2008/09/23/delegate-type-inference-in-c.aspx

Что я не знал до сегодняшнего дня, так это то, что строка № 13 сработает, что вы можно просто передать имя метода в качестве параметра и тип делегата будет выведено Легко и приятно. Строка № 14 / № 15 была также новой для меня, ну хотя бы часть об использовании () для пустого списка параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...