Когда мне следует использовать FrameworkPropertyMetadata или UIPropertyMetadata вместо обычных PropertyMetadata?


82

При просмотре примеров присоединенных свойств и поведения я обнаружил массу вариантов использования FrameworkPropertyMetadata, UIPropertyMetadataи PropertyMetadata. Поскольку все они образуют иерархию наследования, как мне выбрать, какую из них использовать?

Ответы:


81

Эти классы должны сообщать о некоторых аспектах поведения свойства зависимости.

Проверьте различные классы, чтобы узнать о предоставляемых ими вариантах.

Например,

если вы просто хотите вернуть свойство с помощью dp и указать значение по умолчанию, используйте PropertyMetadata,

если вы хотите указать поведение анимации, используйте UIPropertyMetadata,

но если какое-либо свойство влияет на содержимое уровня фреймворка wpf, например, макет элемента, родительский макет или привязку данных, используйте FrameworkPropertyMetadata.

Подробности вы можете проверить на msdn http://msdn.microsoft.com/en-us/library/ms751554.aspx


2
На самом деле вопрос в том, почему фрагмент propdp использует UIPropertyMetadata, особенно если учесть, что в Silverlight нет подклассов PropertyMetadata? Это сводит меня с ума.
Grank

6
Это потому, что одни и те же фрагменты используются в WPF и Silverlight. Вы можете попробовать разные сниппеты для silverlight по этой ссылке: blog.nerdplusart.com/archives/silverlight-code-snippets
gp.

2
MSDN сообщает: «В общем, вам следует использовать FrameworkPropertyMetadata, особенно если ваше свойство имеет какое-либо взаимодействие с системой свойств и функциями WPF, такими как макет и привязка данных». - (Указание метаданных) msdn.microsoft.com/en-us/library/ms751554.aspx
Уэйн Блосс

Для какой привязки данных следует использовать FrameworkPropertyMetadata? Мне просто нужно свойство, привязанное к IsEnabled элемента управления.
Monstieur
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.