Свойство зависимости - это свойство (не само, но зависит от другого, скажем, свойство привязки XAML), которое регистрирует другое свойство.
Свойство зависимостей регистрирует другое свойство привязки в коде, регистрируя его. Пример, который используется в моем проекте, выглядит следующим образом:
public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null));
В приведенном выше коде ImageUri - это свойство зависимости, которое регистрирует источник, который определен / объявлен внутри generic.xaml (независимо от того, объявлен ли он, определен или что-то еще) следующим образом:
..HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
/>
Так что здесь очень важно, чтобы значение привязки шаблона в XAML было зарегистрировано как свойство зависимости в коде позади.
Итак, когда мы определили в XAML, что источник изображения должен быть привязан к шаблону с источником, мы зарегистрировали тот же источник
В качестве свойства зависимости.
Мы должны сказать, какой тип свойства зависимости заключается в том, что в приведенном выше примере Source является типом BitmapImage, поэтому мы определили typeof (BitmapImage).
Теперь владельцем / родителем этого свойства зависимостей является наш customControlClass CustomImagePlaceHolder, и мы снова определили это при регистрации.
Теперь, чтобы установить значение свойства depndency, используя наши свойства, как показано ниже:
public BitmapImage Source
{
get
{
string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri);
return new BitmapImage(new Uri(strURI));
}
set
{
SetValue(CustomImagePlaceHolder.ImageUri, value);
}
}
Теперь, как это происходит, мы устанавливаем значение из нашего кода позади или xaml в свойство источника, определенное выше, и inturn устанавливает значение свойства зависимостей ImageUri, которое inturn устанавливает значение в привязке шаблона Source, поскольку мы зарегистрировали ImageUri в качестве источника, то есть нет - generic.xaml.