Поделиться через


Присоединенные свойства

Присоединенные свойства позволяют объекту назначать значение для свойства, которое его собственный класс не определяет. Например, дочерние элементы могут использовать присоединенные свойства для информирования родительского элемента о том, как они должны быть представлены в пользовательском интерфейсе. Элемент Grid управления позволяет указать строку и столбец дочернего элемента, задав и Grid.Column присоединенные Grid.Row свойства. Grid.Row и Grid.Column являются присоединенными свойствами, так как они задаются на элементах, которые являются дочерними элементами Grid, а не сами по Grid себе.

Привязываемые свойства должны быть реализованы как присоединенные свойства в следующих сценариях:

  • Если необходимо иметь механизм настройки свойств, доступный для классов, отличных от определяющего класса.
  • Когда класс представляет службу, которую необходимо легко интегрировать с другими классами.

Дополнительные сведения о привязываемых свойствах см. в разделе "Привязываемые свойства".

Создание присоединенного свойства

Процесс создания присоединенного свойства выглядит следующим образом:

  1. BindableProperty Создайте экземпляр с одной из CreateAttached перегрузок метода.
  2. Предоставьте static Getметоды PropertyName и SetPropertyName в качестве методов доступа для присоединенного свойства.

Создание свойства

При создании присоединенного свойства для использования в других типах класс, от которого создается свойство, не требуется.BindableObject Однако целевое свойство для методов доступа должно быть производным или производным от. BindableObject

Присоединенное свойство можно создать, объявив public static readonly свойство типа BindableProperty. Привязываемое свойство должно быть задано возвращаемым значением одной из BindableProperty.CreateAttached перегрузок метода. Объявление должно находиться в теле собственного класса, но за пределами определений элементов.

Внимание

Соглашение об именовании присоединенных свойств заключается в том, что идентификатор присоединенного свойства должен соответствовать имени свойства, указанному в методе CreateAttached , с добавлением свойства к нему.

В следующем коде показан пример присоединенного свойства:

public static readonly BindableProperty HasShadowProperty =
  BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);

При этом создается присоединенное свойство с именем HasShadowPropertyтипа bool. Свойство принадлежит классу ShadowEffect и имеет значение falseпо умолчанию.

Дополнительные сведения о создании привязываемых свойств, включая параметры, которые можно указать во время создания, см. в разделе "Создание привязываемого свойства".

Создание методов доступа

Методы Static GetPropertyName и SetPropertyName требуются в качестве методов доступа для присоединенного свойства, в противном случае система свойств не сможет использовать присоединенное свойство. Метод Getдоступа PropertyName должен соответствовать следующей подписи:

public static valueType GetPropertyName(BindableObject target)

Метод Getдоступа PropertyName должен возвращать значение, содержащееся в соответствующем BindableProperty поле для присоединенного свойства. Это можно сделать путем вызова GetValue метода, передачи идентификатора привязываемого свойства, для которого требуется получить значение, а затем приведения результирующего значения к требуемому типу.

Метод Setдоступа PropertyName должен соответствовать следующей подписи:

public static void SetPropertyName(BindableObject target, valueType value)

Метод Setдоступа PropertyName должен задать значение соответствующего BindableProperty поля для присоединенного свойства. Это можно добиться, вызвав SetValue метод, передав идентификатор привязываемого свойства, для которого необходимо задать значение, и значение, которое необходимо задать.

Для обоих методов доступа целевой объект должен быть или производным от. BindableObject

В следующем примере кода показаны методы доступа для присоединенного HasShadow свойства:

public static bool GetHasShadow (BindableObject view)
{
  return (bool)view.GetValue (HasShadowProperty);
}

public static void SetHasShadow (BindableObject view, bool value)
{
  view.SetValue (HasShadowProperty, value);
}

Использование присоединенного свойства

После создания присоединенного свойства его можно использовать из XAML или кода. В XAML это достигается путем объявления пространства имен с префиксом, с объявлением пространства имен, указывающим имя пространства имен CLR и необязательно имя сборки. Дополнительные сведения см. в разделе "Пространства имен XAML".

В следующем примере кода демонстрируется пространство имен XAML для пользовательского типа, содержащего присоединенное свойство, которое определяется в той же сборке, что и код приложения, ссылающийся на пользовательский тип:

<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
  ...
</ContentPage>

Затем объявление пространства имен используется при настройке присоединенного свойства для определенного элемента управления, как показано в следующем примере кода XAML:

<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />

Эквивалентный код на языке C# показан в следующем примере:

var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);

Использование присоединенного свойства со стилем

Присоединенные свойства также можно добавить в элемент управления по стилю. В следующем примере кода XAML показан явный стиль, использующий HasShadow присоединенное свойство, которое можно применить к Label элементам управления:

<Style x:Key="ShadowEffectStyle" TargetType="Label">
  <Style.Setters>
    <Setter Property="local:ShadowEffect.HasShadow" Value="true" />
  </Style.Setters>
</Style>

Чтобы применить класс Style к классу Label, его свойству Style следует задать значение экземпляра Style с помощью расширения разметки StaticResource, как показано в следующем примере кода.

<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />

Дополнительные сведения о стилях см. в статье Стили .

Расширенные сценарии

При создании присоединенного свойства есть ряд необязательных параметров, которые можно задать для включения сценариев расширенных присоединенных свойств. К ним относятся обнаружение изменений свойств, проверка значений свойств и принудительное выполнение значений свойств. Дополнительные сведения см. в дополнительных сценариях.