Приоритет значения свойств зависимостейDependency Property Value Precedence

В этом разделе рассказывается, как работа системы свойств Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) может повлиять на значение свойства зависимости, и описывается приоритет применения аспектов системы свойств к действительному значению свойства.This topic explains how the workings of the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) property system can affect the value of a dependency property, and describes the precedence by which aspects of the property system apply to the effective value of a property.

Предварительные требованияPrerequisites

Предполагается, что вы имеете представление о свойствах зависимости с точки зрения потребителя существующих свойств зависимостей в классах WPFWPF и ознакомились с разделом Общие сведения о свойствах зависимости.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on WPFWPF classes, and have read Dependency Properties Overview. Чтобы выполнить примеры в этом разделе, следует также иметь представление о Язык XAMLExtensible Application Markup Language (XAML) и написании приложений WPFWPF.To follow the examples in this topic, you should also understand Язык XAMLExtensible Application Markup Language (XAML) and know how to write WPFWPF applications.

Система свойств WPFThe WPF Property System

Система свойств WPFWPF предлагает эффективный способ определения значений свойств зависимостей с помощью множества факторов, включая такие возможности, как проверка свойства в режиме реального времени, позднее связывание и уведомление связанных свойств об изменениях значений других свойств.The WPFWPF property system offers a powerful way to have the value of dependency properties be determined by a variety of factors, enabling features such as real-time property validation, late binding, and notifying related properties of changes to values for other properties. Точный порядок и логика, используемые для определения значений свойства зависимости, достаточно сложны.The exact order and logic that is used to determine dependency property values is reasonably complex. Знание этого порядка поможет избежать ненужной настройки свойств и путаницы в вопросах, почему определенные попытки повлиять на значение свойства зависимости или спрогнозировать его не дали ожидаемого результата.Knowing this order will help you avoid unnecessary property setting, and might also clear up confusion over exactly why some attempt to influence or anticipate a dependency property value did not end up resulting in the value you expected.

Свойства зависимостей могут быть "установлены" в нескольких расположенияхDependency Properties Might Be "Set" in Multiple Places

Ниже приведен пример XAMLXAML где то же свойство (Background) имеет три разных «set» операции, которые могут повлиять на значение.The following is example XAMLXAML where the same property (Background) has three different "set" operations that might influence the value.

    <Button Background="Red">
      <Button.Style>
        <Style TargetType="{x:Type Button}">
          <Setter Property="Background" Value="Green"/>
          <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter Property="Background" Value="Blue" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </Button.Style>
Click
    </Button>

Как вы считаете, какой цвет будет здесь использован: красный, зеленый или синий?Here, which color do you expect will apply—red, green, or blue?

За исключением динамических значений и приведения наборы локальных свойств устанавливаются с наивысшим приоритетом.With the exception of animated values and coercion, local property sets are set at the highest precedence. Если значение задается локально, можно ожидать, что значение будет соблюдаться, даже если выше все стили и шаблоны элемента управления.If you set a value locally you can expect that the value will be honored, even above any styles or control templates. В этом примере Background задается значение Red, локально.Here in the example, Background is set to Red locally. Таким образом, стиль, определенный в этой области, даже если это неявный стиль, который в противном случае будет применяться ко всем элементам этого типа в этой области, не наивысший приоритет для Background свойства его значение.Therefore, the style defined in this scope, even though it is an implicit style that would otherwise apply to all elements of that type in that scope, is not the highest precedence for giving the Background property its value. Если удалить локальное значение Red из этого экземпляра Button, то стиль получит приоритет и кнопка получит значение Background из стиля.If you removed the local value of Red from that Button instance, then the style would have precedence and the button would obtain the Background value from the style. Внутри стиля приоритет получают триггеры, поэтому кнопка будет синей, если указатель мыши находится над ней, и зеленым в других случаях.Within the style, triggers take precedence, so the button will be blue if the mouse is over it, and green otherwise.

Список приоритета настройки свойств зависимостиDependency Property Setting Precedence List

Ниже приведен точный порядок, который использует система свойств при присвоении значений времени выполнения свойствам зависимостей.The following is the definitive order that the property system uses when assigning the run-time values of dependency properties. Сначала указаны элементы с наивысшим приоритетом.Highest precedence is listed first. Этот список включает некоторые обобщения, сделанные в разделе Общие сведения о свойствах зависимостей.This list expands on some of the generalizations made in the Dependency Properties Overview.

  1. Приведение системы свойств.Property system coercion. Дополнительные сведения о приведении см. в теме Приведение, анимация и базовое значение далее в этом разделе.For details on coercion, see Coercion, Animation, and Base Value later in this topic.

  2. Активные анимации или анимации с поведением Hold.Active animations, or animations with a Hold behavior. Анимация свойства имеет практический эффект только в том случае, если она может иметь приоритет над базовым (неанимированным) значением, даже если это значение было задано локально.In order to have any practical effect, an animation of a property must be able to have precedence over the base (unanimated) value, even if that value was set locally. Дополнительные сведения см. в теме Приведение, анимация и базовое значение далее в этом разделе.For details, see Coercion, Animation, and Base Value later in this topic.

  3. Локальное значение.Local value. Локальное значение может устанавливаться с помощью «оболочки» свойства, которое приравнивается к настройке атрибут или свойство в качестве элемента XAMLXAML, или с помощью вызова SetValue APIAPI с помощью свойства конкретного экземпляра.A local value might be set through the convenience of the "wrapper" property, which also equates to setting as an attribute or property element in XAMLXAML, or by a call to the SetValue APIAPI using a property of a specific instance. Если задано локальное значение с помощью привязки или ресурса, каждый из них функционирует в таком приоритете, как если бы было задано прямое значение.If you set a local value by using a binding or a resource, these each act in the precedence as if a direct value was set.

  4. Свойства шаблона TemplatedParent.TemplatedParent template properties. Элемент имеет TemplatedParent если она была создана как часть шаблона ( ControlTemplate или DataTemplate).An element has a TemplatedParent if it was created as part of a template (a ControlTemplate or DataTemplate). Дополнительные сведения о случаях его применения см. в теме TemplatedParent далее в этом разделе.For details on when this applies, see TemplatedParent later in this topic. В шаблоне действует следующий приоритет:Within the template, the following precedence applies:

    1. Триггеры — с TemplatedParent шаблона.Triggers from the TemplatedParent template.

    2. Наборы свойств (обычно через XAMLXAML атрибуты) в TemplatedParent шаблона.Property sets (typically through XAMLXAML attributes) in the TemplatedParent template.

  5. Неявный стиль.Implicit style. Применяется только к свойству Style.Applies only to the Style property. Свойство Style заполняется любым ресурсом стиля с ключом, соответствующим типу этого элемента.The Style property is filled by any style resource with a key that matches the type of that element. Ресурс стиля должен существовать либо на странице, либо в приложении; поиск ресурса неявного стиля в темах не выполняется.That style resource must exist either in the page or the application; lookup for an implicit style resource does not proceed into the themes.

  6. Триггеры стилей.Style triggers. Триггеры в стилях со страницы или из приложения (эти стили могут быть явными или неявными, но не стилями по умолчанию, поскольку последние имеют более низкий приоритет).The triggers within styles from page or application (these styles might be either explicit or implicit styles, but not from the default styles, which have lower precedence).

  7. Триггеры шаблонов.Template triggers. Любой триггер из шаблона внутри стиля или непосредственно применяемый шаблон.Any trigger from a template within a style, or a directly applied template.

  8. Методы задания стилей.Style setters. Значения из Setter в стилях со страницы или приложения.Values from a Setter within styles from page or application.

  9. Стиль (тема) по умолчанию.Default (theme) style. Подробные сведения о применении этих стилей и связи стилей тем с шаблонами в стилях тем см. в теме Стили (темы) по умолчанию далее в этом разделе.For details on when this applies, and how theme styles relate to the templates within theme styles, see Default (Theme) Styles later in this topic. В стиле по умолчанию применяется следующий порядок приоритета:Within a default style, the following order of precedence applies:

    1. Активные триггеры в тематическом стиле.Active triggers in the theme style.

    2. Методы задания в тематическом стиле.Setters in the theme style.

  10. Наследование.Inheritance. Некоторые свойства зависимостей наследуют свои значения от родительского элемента к дочерним элементам, так что их не требуется задавать по отдельности на каждом элементе в приложении.A few dependency properties inherit their values from parent element to child elements, such that they need not be set specifically on each element throughout an application. Подробные сведения см. в разделе Наследование значений свойств.For details see Property Value Inheritance.

  11. Значение по умолчанию из метаданных свойства зависимости.Default value from dependency property metadata. Любое заданное свойство зависимостей может иметь значение по умолчанию, заданное при регистрации системы свойств конкретного свойства.Any given dependency property may have a default value as established by the property system registration of that particular property. Кроме того, производные классы, которые наследуют свойства зависимостей, имеют возможность переопределить эти метаданные (включая значение по умолчанию) на уровне отдельных типов.Also, derived classes that inherit a dependency property have the option to override that metadata (including the default value) on a per-type basis. Дополнительные сведения см. в разделе Метаданные свойств зависимостей.See Dependency Property Metadata for more information. Поскольку наследование для наследуемого свойства проверяется до значения по умолчанию, значение по умолчанию родительского элемента имеет приоритет над дочерним элементом.Because inheritance is checked before default value, for an inherited property, a parent element default value takes precedence over a child element. Следовательно, если наследуемое свойство нигде не задано, используется значение по умолчанию, как указано в корневом элементе, либо родительское значение используется вместо значения по умолчанию дочернего элемента.Consequently, if an inheritable property is not set anywhere, the default value as specified on the root or parent is used instead of the child element default value.

TemplatedParentTemplatedParent

TemplatedParent как приоритетный элемент не применяется ни к какому свойству элемента, объявляемому непосредственно в стандартной разметке приложения.TemplatedParent as a precedence item does not apply to any property of an element that you declare directly in standard application markup. Понятие TemplatedParent существует только для дочерних элементов в пределах визуального дерева, которые создаются в результате применения шаблона.The TemplatedParent concept exists only for child items within a visual tree that come into existence through the application of the template. Когда система свойств ищет TemplatedParent шаблона для значения, она ищет шаблон, который создал этот элемент.When the property system searches the TemplatedParent template for a value, it is searching the template that created that element. Значения свойств из TemplatedParent шаблон обычно функционируют, как если бы они были установлены в качестве локальное значение для дочернего элемента, но это имеет меньший приоритет относительно локального значения существует, так как шаблоны являются совместно.The property values from the TemplatedParent template generally act as if they were set as a local value on the child element, but this lesser precedence versus the local value exists because the templates are potentially shared. Дополнительные сведения см. в разделе TemplatedParent.For details, see TemplatedParent.

Свойство стиляThe Style Property

Порядок поиска, описанный выше ко всем возможным свойствам зависимостей, кроме одного: Style свойство.The order of lookup described earlier applies to all possible dependency properties except one: the Style property. Style Свойство является уникальным в том, что он стиль невозможно, поэтому элементы приоритета с 5 по 8 не применяются.The Style property is unique in that it cannot itself be styled, so the precedence items 5 through 8 do not apply. Кроме того, анимация или приведение Style не рекомендуется (и анимации Style потребует использования пользовательского класса анимации).Also, either animating or coercing Style is not recommended (and animating Style would require a custom animation class). При этом остается три способа Style свойство может иметь значение:This leaves three ways that the Style property might be set:

  • Явный стиль.Explicit style. Style Свойство задается напрямую.The Style property is set directly. В большинстве случаев стиль не определяется внутри объекта, а используется ссылка на стиль как ресурс с применением явного ключа.In most scenarios, the style is not defined inline, but instead is referenced as a resource, by explicit key. В этом случае само свойство Style действует как локальное значение с приоритетом 3.In this case the Style property itself acts as if it were a local value, precedence item 3.

  • Неявный стиль.Implicit style. Style Свойство не задано напрямую.The Style property is not set directly. Тем не менее Style существует на определенном уровне последовательности поиска ресурсов (страницы, приложения) и шифруется с помощью ключа ресурса, который соответствует является стиль, применяемый к типу.However, the Style exists at some level in the resource lookup sequence (page, application) and is keyed using a resource key that matches the type the style is to be applied to. В этом случае Style само свойство действует с приоритетом, определенным в последовательности как элемент 5.In this case, the Style property itself acts by a precedence identified in the sequence as item 5. Это условие можно обнаружить с помощью DependencyPropertyHelper от Style свойство и ищете ImplicitStyleReference в результатах.This condition can be detected by using DependencyPropertyHelper against the Style property and looking for ImplicitStyleReference in the results.

  • Стиль по умолчанию, также известный как стиль темы.Default style, also known as theme style. Style Свойство не задается напрямую, а на самом деле оно считывается как null времени выполнения.The Style property is not set directly, and in fact will read as null up until run time. В этом случае стиль поступает из оценки темы времени выполнения, которая является частью механизма презентации WPFWPF.In this case, the style comes from the run-time theme evaluation that is part of the WPFWPF presentation engine.

Для неявных стилей не в темах необходимо точное соответствие - MyButton Button-производный класс не будет неявно использовать стиль для Button.For implicit styles not in themes, the type must match exactly - a MyButton Button-derived class will not implicitly use a style for Button.

Стили (темы) по умолчаниюDefault (Theme) Styles

Каждый элемент управления, который поставляется с WPFWPF, имеет стиль по умолчанию.Every control that ships with WPFWPF has a default style. Стили по умолчанию могут варьироваться по темам, поэтому иногда их называют тематическими стилями.That default style potentially varies by theme, which is why this default style is sometimes referred to as a theme style.

Наиболее важные сведения, находящийся в стиле по умолчанию для элемента управления — его шаблон элемента управления, который существует в тематическом стиле в качестве метода задания для его Template свойство.The most important information that is found within a default style for a control is its control template, which exists in the theme style as a setter for its Template property. При отсутствии шаблона из стилей по умолчанию элемент управления без пользовательского шаблона в составе пользовательского стиля вообще бы не имел визуального представления.If there were no template from default styles, a control without a custom template as part of a custom style would have no visual appearance at all. Шаблон из стиля по умолчанию придает визуальному представлению каждого элемента управления базовую структуру, а также определяет подключения между свойствами, определенными в визуальном дереве шаблона и соответствующем классе элементов управления.The template from the default style gives the visual appearance of each control a basic structure, and also defines the connections between properties defined in the visual tree of the template and the corresponding control class. Каждый элемент управления предоставляет набор свойств, которые могут повлиять на внешний вид элемента управления без полной замены шаблона.Each control exposes a set of properties that can influence the visual appearance of the control without completely replacing the template. Например, рассмотрим по умолчанию внешний вид Thumb элемент управления, который является компонентом из ScrollBar.For example, consider the default visual appearance of a Thumb control, which is a component of a ScrollBar.

Объект Thumb имеет ряд настраиваемых свойств.A Thumb has certain customizable properties. Шаблон по умолчанию Thumb создает базовую структуру / визуальное дерево с несколькими вложенными Border компоненты для создания наклона.The default template of a Thumb creates a basic structure / visual tree with several nested Border components to create a bevel look. Если свойство, которое является частью шаблона должно быть предоставлено для настройки с Thumb класса, то это свойство должно быть предоставлено TemplateBinding, в шаблоне.If a property that is part of the template is intended to be exposed for customization by the Thumb class, then that property must be exposed by a TemplateBinding, within the template. В случае использования Thumb, различные свойства этих границ имеют общую привязку шаблона свойствам, такие как Background или BorderThickness.In the case of Thumb, various properties of these borders share a template binding to properties such as Background or BorderThickness. Однако некоторые другие свойства или визуальные представления заданы в коде шаблона элемента управления или привязаны к значениям, которые поступают непосредственно из темы; чтобы изменить их, необходимо заменить весь шаблон.But certain other properties or visual arrangements are hard-coded into the control template or are bound to values that come directly from the theme, and cannot be changed short of replacing the entire template. Как правило, если свойство поступает из шаблонного родительского элемента и не предоставляется привязкой шаблона, его невозможно скорректировать с помощью стилей, поскольку нет простого способа указать его в качестве целевого объекта.Generally, if a property comes from a templated parent and is not exposed by a template binding, it cannot be adjusted by styles because there is no easy way to target it. Однако это свойство может зависеть от наследования значения свойства в примененном шаблоне или значения по умолчанию.But that property could still be influenced by property value inheritance in the applied template, or by default value.

Тематические стили используют тип в качестве ключа в своих определениях.The theme styles use a type as the key in their definitions. Тем не менее, при применении тем к экземпляру данного элемента, поиск тем для этого типа выполняется путем проверки DefaultStyleKey свойство элемента управления.However, when themes are applied to a given element instance, themes lookup for this type is performed by checking the DefaultStyleKey property on a control. Это отличается от сценария неявных стилей, где используется литеральный тип.This is in contrast to using the literal Type, as implicit styles do. Значение DefaultStyleKey бы наследуется производными классами, даже если разработчик не изменяет его (рекомендуется изменять свойство не переопределить его на уровне свойств, но чтобы изменить его значение по умолчанию в метаданных свойства).The value of DefaultStyleKey would inherit to derived classes even if the implementer did not change it (the intended way of changing the property is not to override it at the property level, but to instead change its default value in property metadata). Такая опосредованность позволяет базовым классам определять тематические стили для производных элементов, которые в противном случае не имеют стиля (или, что более важно, не имеют шаблона внутри стиля и поэтому вообще не имеют визуального представления по умолчанию).This indirection enables base classes to define the theme styles for derived elements that do not otherwise have a style (or more importantly, do not have a template within that style and would thus have no default visual appearance at all). Таким образом, можно создавать производные MyButton из Button по-прежнему получите Button шаблон по умолчанию.Thus, you can derive MyButton from Button and will still get the Button default template. Если вы были создателем элемента управления MyButton и требуется другое поведение, можно переопределить метаданные свойства зависимостей для DefaultStyleKey на MyButton чтобы возвращать другой ключ, а затем определить соответствующие тематические стили, включая шаблон для MyButton , необходимо упаковать с вашей MyButton элемента управления.If you were the control author of MyButton and you wanted a different behavior, you could override the dependency property metadata for DefaultStyleKey on MyButton to return a different key, and then define the relevant theme styles including template for MyButton that you must package with your MyButton control. Дополнительные сведения о темах, стилях и создании элементов управления см. в разделе Общие сведения о создании элементов управления.For more details on themes, styles, and control authoring, see Control Authoring Overview.

Ссылки на динамические ресурсы и привязкиDynamic Resource References and Binding

В операциях со ссылками на динамические ресурсы и привязками учитывается приоритет расположения при настройке.Dynamic resource references and binding operations respect the precedence of the location at which they are set. Например, динамический ресурс, применяемый к локальному значению, действует с приоритетом 3, привязка для метода задания свойства в тематическом стиле действует с приоритетом 9 и так далее.For example, a dynamic resource applied to a local value acts per precedence item 3, a binding for a property setter within a theme style applies at precedence item 9, and so on. Поскольку ссылки на динамические ресурсы и привязки должны иметь возможность получения значений из состояния времени выполнения приложения, это предполагает, что фактический процесс определения приоритета значения свойства для какого-либо свойства распространяется и на время выполнения.Because dynamic resource references and binding must both be able to obtain values from the run time state of the application, this entails that the actual process of determining the property value precedence for any given property extends into the run time as well.

Ссылки на динамические ресурсы, строго говоря, не являются частью системы свойств, но они имеют свой порядок поиска, который перекликается с вышеуказанной последовательностью.Dynamic resource references are not strictly speaking part of the property system, but they do have a lookup order of their own which interacts with the sequence listed above. Этот приоритет более подробно описан в разделе Ресурсы XAML.That precedence is documented more thoroughly in the XAML Resources. В общем случае действует следующий приоритет: элемент корневой страницы, приложение, тема, система.The basic summation of that precedence is: element to page root, application, theme, system.

Динамические ресурсы и привязки получают приоритет расположения, в котором они были заданы, но значение откладывается.Dynamic resources and bindings have the precedence of where they were set, but the value is deferred. Следствием этого является тот факт, что если задать для динамического ресурса или привязки локальное значение, то при любом изменении локального значения динамический ресурс или привязка будут меняться полностью.One consequence of this is that if you set a dynamic resource or binding to a local value, any change to the local value replaces the dynamic resource or binding entirely. Даже если вы вызываете ClearValue метод, чтобы удалить локально заданное значение, динамический ресурс или привязка не будет восстановлено.Even if you call the ClearValue method to clear the locally set value, the dynamic resource or binding will not be restored. На самом деле, если вы вызываете ClearValue на свойство, которое имеет динамический ресурс или привязка имея (без литерального локального значения), они также будут удалены с ClearValue вызвать слишком.In fact, if you call ClearValue on a property that has a dynamic resource or binding in place (with no literal local value), they are cleared by the ClearValue call too.

SetCurrentValueSetCurrentValue

SetCurrentValue Метод — еще один способ задать свойство, но не в порядке приоритета.The SetCurrentValue method is another way to set a property, but it is not in the order of precedence. Вместо этого SetCurrentValue позволяет изменить значение свойства, не перезаписывая источник предыдущего значения.Instead, SetCurrentValue enables you to change the value of a property without overwriting the source of a previous value. Можно использовать SetCurrentValue каждый раз, когда требуется задать значение, не предоставляя этому значению приоритет локального значения.You can use SetCurrentValue any time that you want to set a value without giving that value the precedence of a local value. Например, если свойство задается триггером, а затем ему присваивается другое значение с помощью SetCurrentValue, система свойств по-прежнему учитывает этот триггер, и свойство меняется, если происходит действие триггера.For example, if a property is set by a trigger and then assigned another value via SetCurrentValue, the property system still respects the trigger and the property will change if the trigger’s action occurs. SetCurrentValue позволяет изменить значение свойства, не предоставляя ему источник с более высоким приоритетом.SetCurrentValue enables you to change the property’s value without giving it a source with a higher precedence. Аналогичным образом, можно использовать SetCurrentValue для изменения значения свойства, не перезаписывая привязку.Likewise, you can use SetCurrentValue to change the value of a property without overwriting a binding.

Приведение, анимации и базовое значениеCoercion, Animations, and Base Value

Приведение и анимация используют значение, которое в SDKSDK определяется как "базовое значение".Coercion and animation both act on a value that is termed as the "base value" throughout this SDKSDK. Базовое значение — это любое значение, определяемое посредством восходящей оценки элементов до тех пор, пока не будет достигнут элемент 2.The base value is thus whatever value is determined through evaluating upwards in the items until item 2 is reached.

Для анимации базовое значение может повлиять на анимированное значение, если анимация не указывает значения From и To для определенных моделей поведения, либо если анимация умышленно возвращается к базовому значению по завершении выполнения.For an animation, the base value can have an effect on the animated value, if that animation does not specify both "From" and "To" for certain behaviors, or if the animation deliberately reverts to the base value when completed. Чтобы увидеть это на практике, запустите Пример целевых значений анимации From, To, By.To see this in practice, run the From, To, and By Animation Target Values Sample. Попробуйте установить локальные значения высоты прямоугольника в примере, чтобы начальное локальное значение отличалось от любого значения From в анимации.Try setting the local values of the rectangle height in the example, such that the initial local value differs from any "From" in the animation. Обратите внимание, что анимация сразу же начинает использовать значения From и заменяет базовое значение после запуска.You will note that the animations start right away using the "From" values and replace the base value once started. Анимацию можно указать, чтобы вернуться к значению, обнаруженному перед анимацией после ее завершения, указав Stop FillBehavior.The animation might specify to return to the value found before animation once it is completed by specifying the Stop FillBehavior. После этого для определения базового значения используется обычный приоритет.Afterwards, normal precedence is used for the base value determination.

К одному свойству можно применить несколько анимаций, причем каждая из этих анимаций может быть определена в разных точках списка приоритетов значений.Multiple animations might be applied to a single property, with each of these animations possibly having been defined from different points in the value precedence. Однако вместо того чтобы применять анимацию с более высоким приоритетом, вероятно, анимации объединят свои значения.However, these animations will potentially composite their values, rather than just applying the animation from the higher precedence. Это зависит от того, как именно определяются анимации, и от типа анимируемого значения.This depends on exactly how the animations are defined, and the type of the value that is being animated. Дополнительные сведения об анимации свойств см. в разделе Общие сведения об эффектах анимации.For more information about animating properties, see Animation Overview.

Приведение применяется на самом высоком уровне.Coercion applies at the highest level of all. Приведение значения может быть выполнено даже для уже выполняющейся анимации.Even an already running animation is subject to value coercion. Некоторые существующие свойства зависимостей в WPFWPF имеют встроенные приведения.Certain existing dependency properties in WPFWPF have built-in coercion. Для настраиваемого свойства зависимости, для настраиваемого свойства зависимости поведение приведения определяется путем написания CoerceValueCallback и передачи обратного вызова в составе метаданных при создании свойства.For a custom dependency property, you define the coercion behavior for a custom dependency property by writing a CoerceValueCallback and passing the callback as part of metadata when you create the property. Также можно переопределить поведение приведения существующих свойств путем переопределения метаданных для этого свойства в производном классе.You can also override coercion behavior of existing properties by overriding the metadata on that property in a derived class. Приведение взаимодействует с базовым значением таким образом, что ограничения на приведение применяются в том виде, в котором они существуют на тот момент, однако базовое значение сохраняется.Coercion interacts with the base value in such a way that the constraints on coercion are applied as those constraints exist at the time, but the base value is still retained. Таким образом, если ограничения в приведении впоследствии будут сняты, приведение вернет ближайшее к базовому возможное значение и, возможно, влияние приведения на свойство прекратится, как только ограничение будет снято.Therefore, if constraints in coercion are later lifted, the coercion will return the closest value possible to that base value, and potentially the coercion influence on a property will cease as soon as all constraints are lifted. Дополнительные сведения о поведении приведения см. в разделе Проверка и обратные вызовы свойства зависимостей.For more information about coercion behavior, see Dependency Property Callbacks and Validation.

Поведения триггераTrigger Behaviors

Элементы управления часто определяют поведение триггера в составе своего стиля по умолчанию, в темах.Controls often define trigger behaviors as part of their default style in themes. Установка локальных свойств для элементов управления может препятствовать реагированию триггеров на инициированные пользователями события (визуально или своими действиями).Setting local properties on controls might prevent the triggers from being able to respond to user-driven events either visually or behaviorally. Наиболее распространенное использование триггера свойств предназначен для свойства элемента управления или состояния, например IsSelected.The most common use of a property trigger is for control or state properties such as IsSelected. Например, по умолчанию при Button отключена (триггер для IsEnabledfalse) то Foreground значение в тематическом стиле является то, что элемент управления затемнены «».For example, by default when a Button is disabled (trigger for IsEnabled is false) then the Foreground value in the theme style is what causes the control to appear "grayed out". Но если вы задали локальный Foreground значение, что обычный серый цвет будет отменен в приоритете, набора локальных свойств даже в этом сценарии триггера свойства.But if you have set a local Foreground value, that normal gray-out color will be overruled in precedence by your local property set, even in this property-triggered scenario. Будьте осторожны при установке значений для свойств, которые имеют поведения триггеров на уровне темы; кроме того, необходимо убедиться, что не создается ненужных помех работе пользователя с этим элементом управления.Be cautious of setting values for properties that have theme-level trigger behaviors and make sure you are not unduly interfering with the intended user experience for that control.

ClearValue и приоритет значенияClearValue and Value Precedence

ClearValue Метод предоставляет соответствующие средства для очистки любого применяемого локально значения из свойства зависимости, которое задается в элементе.The ClearValue method provides an expedient means to clear any locally applied value from a dependency property that is set on an element. Однако, при вызове ClearValue не гарантирует, что новое действительное значение по умолчанию, заданное в метаданных во время регистрации свойства.However, calling ClearValue is not a guarantee that the default as established in metadata during property registration is the new effective value. Все остальные участники в приоритете значений будут по-прежнему активны.All of the other participants in value precedence are still active. Только локально заданное значение удаляется из последовательности приоритетов.Only the locally set value has been removed from the precedence sequence. Например, если вы вызываете ClearValue по свойству, где этот также задано тематическим стилем, а затем тематическое значение будет применено как новое значение, а не по умолчанию на основе метаданных.For example, if you call ClearValue on a property where that property is also set by a theme style, then the theme value is applied as the new value rather than the metadata-based default. Если вы хотите извлечь все элементы значения свойства из процесса и значение по умолчанию зарегистрированные метаданные, можно получить значение по умолчанию точно, путем запроса метаданных свойства зависимостей, а затем можно использовать локально значение по умолчанию свойство с вызовом SetValue.If you want to take all property value participants out of the process and set the value to the registered metadata default, you can obtain that default value definitively by querying the dependency property metadata, and then you can use the default value to locally set the property with a call to SetValue.

См. такжеSee Also

DependencyObject
DependencyProperty
Общие сведения о свойствах зависимостиDependency Properties Overview
Пользовательские свойства зависимостейCustom Dependency Properties
Проверка и обратные вызовы свойства зависимостейDependency Property Callbacks and Validation