Метаданные свойств Framework (WPF .NET)
Параметры метаданных свойств платформы можно задать для свойств зависимостей на уровне платформы Windows Presentation Foundation (WPF). Назначение уровня платформы WPF применяется, когда API презентации WPF и исполняемые файлы обрабатывают отрисовку и привязку данных. API презентации и исполняемые файлы запрашивают FrameworkPropertyMetadata свойство зависимостей.
Необходимые компоненты
Для понимания статьи нужно иметь базовые знания о свойствах зависимостей и прочитать Общие сведения о свойствах зависимостей. Чтобы понимать примеры в этой статье полезно познакомиться с языком XAML и узнать, как создавать приложения WPF.
Категории метаданных свойств Framework
FrameworkPropertyMetadata попадает в следующие категории:
Метаданные, влияющие на макет элемента, в частности AffectsArrangeAffectsMeasureфлаги метаданных и AffectsRender метаданные. Вы можете задать эти флаги, если реализация свойства зависимостей влияет на визуальный аспект, и вы реализуете MeasureOverride или ArrangeOverride в классе.
ArrangeOverride
МетодыMeasureOverride
предоставляют сведения о поведении и отрисовке реализации в системе макета. Если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.
Указание метаданных FrameworkPropertyMe
При регистрации свойства зависимостей можно создать и назначить ему метаданные. Объект метаданных, который вы назначаете, может быть PropertyMetadata или одним из производных классов, например FrameworkPropertyMetadata. Выберите FrameworkPropertyMetadata
свойства зависимостей, использующие API презентации WPF и исполняемые файлы для отрисовки и привязки данных. Более сложный вариант заключается в том, чтобы создать FrameworkPropertyMetadata
пользовательский класс отчетов метаданных с большими флагами. Кроме того, можно использовать UIPropertyMetadata для свойств, отличных от платформы, влияющих на отрисовку пользовательского интерфейса.
Хотя параметры метаданных обычно задаются во время регистрации нового свойства зависимостей, их можно изменить в OverrideMetadata или AddOwner вызовах. При переопределении метаданных всегда переопределяется с тем же типом метаданных, который использовался во время регистрации свойств.
Характеристики свойства, предоставляемые FrameworkPropertyMetadata
, иногда называются флагами. Если вы создаете экземпляр, существует два способа заполнения значений FrameworkPropertyMetadata
флагов:
Задайте флаги для экземпляра FrameworkPropertyMetadataOptions типа перечисления.
FrameworkPropertyMetadataOptions
позволяет указать флаги метаданных в битовой комбинации OR. Затем создайтеFrameworkPropertyMetadata
экземпляр с помощью конструктора, имеющегоFrameworkPropertyMetadataOptions
параметр, и передайте его в экземплярFrameworkPropertyMetadataOptions
. Чтобы изменить флаги метаданных после передачиFrameworkPropertyMetadataOptions
в FrameworkPropertyMetadata конструктор, измените соответствующее свойство в новомFrameworkPropertyMetadata
экземпляре. Например, если задать FrameworkPropertyMetadataOptions.NotDataBindable флаг, его можно отменить, задав для этого значение FrameworkPropertyMetadata.IsNotDataBindablefalse
.Создайте
FrameworkPropertyMetadata
экземпляр с помощью конструктора, который не имеетFrameworkPropertyMetadataOptions
параметра, а затем задайте соответствующие Boolean флагиFrameworkPropertyMetadata
. Задайте значения флага перед связываниемFrameworkPropertyMetadata
экземпляра со свойством зависимостей, в противном случае вы получите значение InvalidOperationException.
Поведение переопределения метаданных
При переопределении метаданных свойства платформы измененные значения метаданных заменяются или объединяются с исходными значениями:
PropertyChangedCallbackДля логики слияния по умолчанию сохраняются предыдущие
PropertyChangedCallback
значения в таблице, и все вызываются при изменении свойства. Порядок обратного вызова определяется глубиной класса, т. е. обратный вызов, зарегистрированный базовым классом в иерархии, выполняется первым. Унаследованные обратные вызовы выполняются только один раз и принадлежат классу, который добавил их в метаданные.Для DefaultValue новое значение заменит существующее значение по умолчанию. Если вы не указываете
DefaultValue
в переопределении метаданные и если FrameworkPropertyMetadata существующий имеетInherits
набор флагов, значение по умолчанию поступает от ближайшего предка, указанногоDefaultValue
в метаданных.CoerceValueCallbackВ случае с новым значением будет заменено существующее
CoerceValueCallback
значение. Если вы не указываетеCoerceValueCallback
в переопределении метаданных, значение поступает от ближайшего предка в цепочке наследования, которая указала значениеCoerceValueCallback
.Для
FrameworkPropertyMetadata
ненаследуемых флагов можно переопределить значение по умолчаниюfalse
со значениемtrue
. Однако можно переопределитьtrue
значение только со значениемfalse
, InheritsJournalа OverridesInheritanceBehaviorSubPropertiesDoNotAffectRenderтакже .
Примечание.
Логика слияния по умолчанию реализуется методом Merge. Пользовательскую логику слияния можно указать в производном классе, наследующем свойство зависимостей, переопределив Merge
в этом классе.
См. также
.NET Desktop feedback