Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметры метаданных свойств платформы можно задать для свойств зависимостей на уровне платформы Windows Presentation Foundation (WPF). Назначение уровня платформы WPF применяется, когда API презентации WPF и исполняемые файлы обрабатывают отрисовку и привязку данных. API презентации и исполняемые файлы запрашивают идентификатор FrameworkPropertyMetadata свойства зависимости.
Предпосылки
В статье предполагается, что у вас есть базовые знания о свойствах зависимости и что вы прочитали Обзор свойств зависимостей. Чтобы следовать примерам в этой статье, это поможет вам, если вы знакомы с языком разметки расширяемых приложений (XAML) и узнаете, как писать приложения WPF.
Категории метаданных свойств Framework
FrameworkPropertyMetadata входят в следующие категории:
Метаданные, влияющие на макет элемента, в частности AffectsArrange, AffectsMeasureи флаги метаданных AffectsRender. Вы можете установить эти флаги, если реализация свойства зависимости влияет на визуальный аспект и вы реализуете MeasureOverride или ArrangeOverride в своем классе. Методы
MeasureOverrideиArrangeOverrideобеспечивают особенности поведения конкретной реализации и информацию о рендеринге в системе макета. ЕслиAffectsArrange,AffectsMeasureилиAffectsRenderзаданы дляtrueв метаданных свойства зависимости, и его эффективное значение изменяется, система свойств WPF инициирует запрос на недействительность визуальных элементов для запуска перерисовки.Метаданные, влияющие на макет родительского элемента элемента, в частности AffectsParentArrange и флаги метаданных AffectsParentMeasure. Примеры свойств зависимостей WPF, которые задают эти флаги, являются FixedPage.Left и Paragraph.KeepWithNext.
Метаданные наследования значений свойств, в частности флаги метаданных Inherits и OverridesInheritanceBehavior. По умолчанию свойства зависимостей не наследуют значения. OverridesInheritanceBehavior дает возможность пути наследования распространяться и на визуальное дерево, что необходимо для некоторых сценариев компоновки элементов управления. Дополнительные сведения см. в разделе «Наследование значений свойств».
Замечание
Термин "наследует" в контексте значений свойств специфичен для свойств зависимостей и не имеет прямого отношения к управляемым типам кода и наследованию членов путём производных типов. В контексте свойств зависимостей это означает, что дочерние элементы могут наследовать значения свойств зависимостей от родительских элементов.
Метаданные привязки данных, в частности, флаги BindsTwoWayByDefault и IsNotDataBindable метаданных. По умолчанию свойства зависимостей в платформе WPF поддерживают односторонняя привязка. Рассмотрите возможность настройки двусторонней привязки в качестве значения по умолчанию для свойств, которые сообщают о своем состоянии и могут изменяться пользователем, например IsSelected. Кроме того, рассмотрите возможность двусторонней привязки в качестве значения по умолчанию, когда пользователи элемента управления ожидают, что свойство будет реализовано, например TextBox.Text.
BindsTwoWayByDefaultвлияет только на режим привязки по умолчанию. Чтобы изменить направление потока данных привязки, задайте Binding.Mode. Вы можете использоватьIsNotDataBindable, чтобы отключить привязку данных, если для нее нет вариантов использования. Дополнительные сведения о привязках данных см. в обзоре привязки данных.Журналирование метаданных, в частности метаданных флаг Journal. Значение по умолчанию флага
Journalравно толькоtrueдля некоторых свойств зависимостей, таких как SelectedIndex. Элементы управления входными данными пользователей должны задать флагJournalдля свойств, значения которых содержат выбор пользователей, которые должны храниться. ФлагJournalсчитывается приложениями или службами, поддерживающими ведение журнала, включая службы журнала WPF. Сведения о хранении шагов навигации см. в разделе "Обзор навигации"
FrameworkPropertyMetadata является производным непосредственно от UIPropertyMetadataи реализует флаги, рассмотренные здесь. Если только не задано, FrameworkPropertyMetadata флаги имеют значение по умолчанию false.
Чтение метаданных FrameworkPropertyMetadata
Чтобы получить метаданные для свойства зависимости, вызовите GetMetadata на идентификаторе DependencyProperty. Вызов GetMetadata возвращает объект PropertyMetadata. Если вам нужно преобразовать значения метаданных платформы, приведите PropertyMetadata к FrameworkPropertyMetadata.
Указание метаданных FrameworkPropertyMetadata
При регистрации свойства зависимостей можно создать и назначить метаданные ему. Объект метаданных, который вы назначаете, может быть PropertyMetadata или одним из производных классов, например FrameworkPropertyMetadata. Выберите FrameworkPropertyMetadata для свойств зависимостей, использующих API презентации WPF и исполняемые файлы для отрисовки и привязки данных. Более продвинутым вариантом является создание пользовательского класса отчета метаданных на основе FrameworkPropertyMetadata с большим количеством флагов. Кроме того, вы можете использовать UIPropertyMetadata для свойств, отличных от платформы, влияющих на отрисовку пользовательского интерфейса.
Хотя параметры метаданных обычно задаются во время регистрации нового свойства зависимостей, их можно изменить в OverrideMetadata или AddOwner вызовах. При переопределении метаданных всегда используйте тот же тип метаданных, который был использован во время регистрации свойств.
Характеристики свойств, предоставляемые FrameworkPropertyMetadata, иногда называются флагами . Если вы создаете экземпляр FrameworkPropertyMetadata, существует два способа заполнения значений флагов:
Задайте флаги для экземпляра типа перечисления FrameworkPropertyMetadataOptions.
FrameworkPropertyMetadataOptionsпозволяет указать флаги метаданных в побитовом сочетании OR. Затем создайте экземплярFrameworkPropertyMetadataс помощью конструктора с параметромFrameworkPropertyMetadataOptionsи передайте экземплярFrameworkPropertyMetadataOptions. Чтобы изменить флаги метаданных после передачиFrameworkPropertyMetadataOptionsв конструктор FrameworkPropertyMetadata, измените соответствующее свойство в новом экземпляреFrameworkPropertyMetadata. Например, если задать флаг FrameworkPropertyMetadataOptions.NotDataBindable, вы можете отменить это, установив FrameworkPropertyMetadata.IsNotDataBindable наfalse.Создайте экземпляр
FrameworkPropertyMetadataс помощью конструктора, который не имеет параметраFrameworkPropertyMetadataOptions, а затем установите соответствующие флаги Boolean наFrameworkPropertyMetadata. Задайте значения флага перед связыванием экземпляраFrameworkPropertyMetadataсо свойством зависимостей, в противном случае вы получите InvalidOperationException.
Поведение переопределения метаданных
При переопределении метаданных свойства платформы измененные значения метаданных заменяются или объединяются с исходными значениями:
Для PropertyChangedCallbackстандартная логика объединения сохраняет предыдущие значения
PropertyChangedCallbackв таблице, и все они вызываются при изменении свойства. Порядок обратного вызова определяется глубиной класса, где обратный вызов, зарегистрированный базовым классом в иерархии, будет выполняться первым. Унаследованные обратные вызовы выполняются только один раз и принадлежат классу, который добавил их в метаданные.Для DefaultValueновое значение заменит существующее значение по умолчанию. Если вы не указываете
DefaultValueв переопределении метаданных и если установлен флаг FrameworkPropertyMetadata для существующегоInherits, то значение по умолчанию берётся от ближайшего предка, который указалDefaultValueв метаданных.Для CoerceValueCallbackновое значение заменит существующее значение
CoerceValueCallback. Если вы не указываетеCoerceValueCallbackв переопределении метаданных, значение поступает от ближайшего предка в иерархии наследования, который указалCoerceValueCallback.Для ненаследуемых флагов
FrameworkPropertyMetadataможно переопределить значение по умолчаниюfalse, заменив его на значениеtrue. Однако можно переопределить только значениеtrueсо значениемfalseдля Inherits, Journal, OverridesInheritanceBehaviorи SubPropertiesDoNotAffectRender.
Замечание
Логика слияния по умолчанию реализуется методом Merge. Вы можете указать пользовательскую логику слияния в производном классе, наследующем свойство зависимости, переопределив Merge в этом классе.
См. также
.NET Desktop feedback