Свойства зависимости создаются так же, как свойства.
Является ли свойство зависимостей, используемым только при создании настраиваемого элемента управления?
Свойства зависимости создаются так же, как свойства.
Является ли свойство зависимостей, используемым только при создании настраиваемого элемента управления?
Свойство Dependency является свойством (а не само, но зависит от другого, скажем, свойство XAML Binding), которое регистрирует другое свойство.
Свойство dependecy регистрирует другое свойство привязки в коде позади, регистрируя его. Пример, который используется в моем проекте, выглядит следующим образом:
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, что источник изображения должен быть привязан к шаблону с источником, мы зарегистрировали тот же источник Как DependencyProperty.
Мы должны сказать, какой тип свойства зависимостей состоит в том, что в приведенном выше примере 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 в исходное свойство, определенное выше, и заставляем его устанавливать значение свойства dependecy ImageUri, которое inturn устанавливает значение в привязке шаблона Source, поскольку мы зарегистрировали ImageUri как источник, то есть presennt generic.xaml.
Свойства зависимостей и стандартные свойства совершенно разные.
Ключевыми функциями, предоставляемыми свойствами зависимостей, являются поддержка привязки и анимации. Если вы хотите присвоить значение для свойства с помощью привязки Binding
или шаблона, это свойство должно быть свойством зависимостей. При анимации свойства свойство зависимостей может отслеживать как текущее присвоенное значение, так и текущее анимированное значение.
Еще одно преимущество, которое часто упускается из виду, - это то, что хранилище необходимо только для свойств, имеющих назначенные значения. Типичный элемент управления может обладать множеством свойств, но его редким кодом, который присваивает новое значение всем свойствам, на самом деле большинство свойств остаются по умолчанию, и только некоторые из них фактически установлены. При свойствах зависимостей значения по умолчанию сохраняются как метаданные, относящиеся к свойству, и не требуют выделения какой-либо памяти на один экземпляр управления, если свойство остается неназначенным.
Свойства зависимостей не ограничены элементами управления (что-либо, полученное из DependencyObject
, может быть тогда), однако оно находится на элементах управления или, по крайней мере, FrameworkElements
, где они наиболее полезны.
Преимущества свойства зависимостей
На самом деле свойство зависимостей имеет множество преимуществ перед обычными свойствами CLR.
INotifyPropertyChanged
при изменении значения свойства, DataBinding
поддерживается внутри. Чтобы узнать больше о INotifyPropertyChanged
, прочитайте.В этом некоторые из функций поддерживаются только свойством Dependency. Animation
, Styles
, Templates
, значение свойства Inheritance и т.д. можно было использовать только с использованием свойства Dependency. Если в таких случаях вы используете свойство CLR, компилятор будет генерировать ошибку.
пройдите через эти статьи,
http://www.codeproject.com/KB/WPF/BeginWPF4.aspx#diff
и http://www.dotnetfunda.com/articles/article961-wpf-tutorial--dependency-property-.aspx
и http://msdn.microsoft.com/en-us/library/cc221408(VS.95).aspx
Если вы наберете propdp и нажмите на символ табуляции в редакторе VS, то автоматически созданная документация свойств зависимостей устанавливается как:
//Использование DependencyProperty в качестве хранилища для MyProperty.
Это позволяет создавать анимацию, стиль, привязку и т.д.
Основное различие между сложностью зависимостей и стандартным свойством clr заключается в том, что свойство зависимостей может быть объектом привязки. Это позволяет привязать значение свойства к значению, предоставленному некоторым другим объектом.
Я бы предположил, что если вы создаете пользовательский элемент управления или расширение разметки, вы обычно хотите раскрывать любые свои общедоступные свойства в качестве свойств зависимостей, чтобы потребитель вашего элемента управления мог лучше манипулировать настройками в XAML (без необходимости делать это в кодировке).
Если ваше свойство обычно будет источником привязки данных (например, предоставляя текст для TextBlock), я бы рекомендовал использовать стандартное свойство CLR и иметь реализованный класс класса INotifyPropertyChanged.
Далее....
Свойство зависимости предоставляет функциональность, которая расширяет функциональность свойства, а не свойство, которое поддерживается полем. Часто каждая такая функциональность представляет или поддерживает определенную особенность общего набора функций WPF.
Ресурсы
Связывание данных
Стили
Анимации
Метаданные переопределяют
Наследование свойств
http://msdn2.microsoft.com/en-us/library/ms752914.aspx
Надеюсь, что это поможет.