Читаем Язык программирования C#9 и платформа .NET5 полностью

• Свойства зависимости предоставляют поддержку инфраструктуры для триггеров WPF (также довольно часто используемых при работе с анимацией и привязкой данных).

Имейте в виду, что во многих случаях вы будете взаимодействовать с существующим свойством зависимости способом, идентичным работе с обычным свойством CLR (благодаря оболочке CLR). В предыдущем разделе, посвященном привязке данных, вы узнали, что если необходимо установить привязку данных в коде, то должен быть вызван метод SetBinding() на целевом объекте операции и указано свойство зависимости, с которым будет работать привязка:

private void SetBindings()

{

  Binding b = new Binding

  {

    // Зарегистрировать преобразователь, источник и путь.

    Converter = new MyDoubleConverter(),

    Source = this.mySB,

    Path = new PropertyPath("Value")

  };

  // Указать свойство зависимости.

  this.labelSBThumb.SetBinding(Label.ContentProperty, b);

}

Вы увидите похожий код в главе 27 во время исследования запуска анимации в коде:

// Указать свойство зависимости.

rt.BeginAnimation(RotateTransform.AngleProperty, dblAnim);

Потребность в построении специального свойства зависимости возникает только во время разработки собственного элемента управления WPF. Например, когда создается класс UserControl с четырьмя специальными свойствами, которые должны тесно интегрироваться с API-интерфейсом WPF, они должны быть реализованы с применением логики свойств зависимости.

В частности, если нужно, чтобы свойство было целью операции привязки данных или анимации, если оно обязано уведомлять о своем изменении, если свойство должно быть в состоянии работать в качестве установщика в стиле WPF или получать свои значения от родительского элемента, то возможностей обычного свойства CLR окажется не достаточно. В случае использования обычного свойства другие программисты действительно могут получать и устанавливать его значение, но если они попытаются применить такое свойство внутри контекста службы WPF, то оно не будет работать ожидаемым образом. Поскольку заранее нельзя узнать, как другие пожелают взаимодействовать со свойствами специальных классов UserControl, нужно выработать в себе привычку при построении специальных элементов управления всегда определять свойства зависимости.

<p id="AutBody_Root1166"><strong>Исследование существующего свойства зависимости</strong></p>

Прежде чем вы научитесь создавать специальные свойства зависимости, давайте рассмотрим внутреннюю реализацию свойства Height класса FrameworkElement. Ниже приведен соответствующий код (с комментариями):

// FrameworkElement "является" DependencyObject.

public class FrameworkElement : UIElement, IFrameworkInputElement,

  IInputElement, ISupportInitialize, IHaveResources, IQueryAmbient

{

  ...

  // Статическое поле только для чтения типа DependencyProperty.

  public static readonly DependencyProperty HeightProperty;

  // Поле DependencyProperty часто регистрируется

  // в статическом конструкторе класса.

  static FrameworkElement()

  {

    ...

    HeightProperty = DependencyProperty.Register(

      "Height",

      typeof(double),

      typeof(FrameworkElement),

      new FrameworkPropertyMetadata((double) 1.0 / (double) 0.0,

        FrameworkPropertyMetadataOptions.AffectsMeasure,

        new PropertyChangedCallback(FrameworkElement.OnTransformDirty)),

      new ValidateValueCallback(FrameworkElement.IsWidthHeightValid));

    }

    // Оболочка CLR, реализованная с использованием

    // унаследованных методов GetValue()/SetValue().

    public double Height

    {

      get { return (double) base.GetValue(HeightProperty); }

      set { base.SetValue(HeightProperty, value); }

    }

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных