Files
Tris ShoresandAndy De George 3bac863f43 Content update - Framework property metadata (user story 1878471) (#1223)
* Add article, snippets, toc, and redirects

* Minor edits

* Make reviewer requested changes

* Section header edit

Co-authored-by: Andy (Steve) De George <[email protected]>
2021-12-07 23:20:09 +00:00

11 KiB

title, description, ms.date, helpviewer_keywords
title description ms.date helpviewer_keywords
Framework property metadata Learn how to set framework property metadata for a dependency property in Windows Presentation Foundation (WPF). 11/20/2021
metadata [WPF], framework properties
framework property metadata [WPF]

Framework property metadata (WPF .NET)

You can set framework property metadata options for dependency properties at the Windows Presentation Foundation (WPF) framework level. The WPF framework level designation applies when WPF presentation APIs and executables handle rendering and data binding. Presentation APIs and executables query the xref:System.Windows.FrameworkPropertyMetadata of a dependency property.

[!INCLUDE desktop guide under construction]

Prerequisites

The article assumes a basic knowledge of dependency properties, and that you've read Dependency properties overview. To follow the examples in this article, it helps if you're familiar with Extensible Application Markup Language (XAML) and know how to write WPF applications.

Framework property metadata categories

xref:System.Windows.FrameworkPropertyMetadata falls into these categories:

xref:System.Windows.FrameworkPropertyMetadata derives directly from xref:System.Windows.UIPropertyMetadata, and implements the flags discussed here. Unless specifically set, FrameworkPropertyMetadata flags have a default value of false.

Reading FrameworkPropertyMetadata

To retrieve metadata for a dependency property, call xref:System.Windows.DependencyProperty.GetMetadata%2A on the xref:System.Windows.DependencyProperty identifier. The GetMetadata call returns a PropertyMetadata object. If you need to query framework metadata values cast PropertyMetadata to xref:System.Windows.FrameworkPropertyMetadata.

Specifying FrameworkPropertyMetadata

When you register a dependency property, you have the option to create and assign metadata to it. The metadata object that you assign can be xref:System.Windows.PropertyMetadata or one of its derived classes, like xref:System.Windows.FrameworkPropertyMetadata. Choose FrameworkPropertyMetadata for dependency properties that rely on WPF presentation APIs and executables for rendering and data binding. A more advanced option is to derive from FrameworkPropertyMetadata to create a custom metadata reporting class with more flags. Or, you might use xref:System.Windows.UIPropertyMetadata for non-framework properties that affect UI rendering.

Although metadata options are typically set during registration of a new dependency property, you can respecify them in xref:System.Windows.DependencyProperty.OverrideMetadata%2A or xref:System.Windows.DependencyProperty.AddOwner%2A calls. When overriding metadata, always override with the same metadata type that was used during property registration.

The property characteristics that are exposed by FrameworkPropertyMetadata are sometimes referred to as flags. If you're creating a FrameworkPropertyMetadata instance, there are two ways to populate flag values:

  1. Set the flags on an instance of the xref:System.Windows.FrameworkPropertyMetadataOptions enumeration type. FrameworkPropertyMetadataOptions lets you specify metadata flags in bitwise OR combination. Then, instantiate FrameworkPropertyMetadata using a constructor that has a FrameworkPropertyMetadataOptions parameter, and pass in your FrameworkPropertyMetadataOptions instance. To change metadata flags after passing FrameworkPropertyMetadataOptions into the xref:System.Windows.FrameworkPropertyMetadata constructor, change the corresponding property on the new FrameworkPropertyMetadata instance. For example, if you set the xref:System.Windows.FrameworkPropertyMetadataOptions.NotDataBindable?displayProperty=nameWithType flag, you can undo that by setting xref:System.Windows.FrameworkPropertyMetadata.IsNotDataBindable%2A?displayProperty=nameWithType to false.

  2. Instantiate FrameworkPropertyMetadata using a constructor that doesn't have a FrameworkPropertyMetadataOptions parameter, and then set the applicable xref:System.Boolean flags on FrameworkPropertyMetadata. Set flag values before associating your FrameworkPropertyMetadata instance with a dependency property, otherwise you'll get an xref:System.InvalidOperationException.

Metadata override behavior

When you override framework property metadata, changed metadata values either replace or are merged with the original values:

Note

The default merge logic is implemented by the xref:System.Windows.PropertyMetadata.Merge%2A method. You can specify custom merge logic in a derived class that inherits a dependency property, by overriding Merge in that class.

See also