DesignModeValueProvider - класс

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

Иерархия наследования

System.Object
  Microsoft.Windows.Design.Features.FeatureProvider
    Microsoft.Windows.Design.Model.DesignModeValueProvider

Пространство имен:  Microsoft.Windows.Design.Model
Сборка:  Microsoft.Windows.Design.Interaction (в Microsoft.Windows.Design.Interaction.dll)

Синтаксис

'Декларация
Public Class DesignModeValueProvider _
    Inherits FeatureProvider
public class DesignModeValueProvider : FeatureProvider
public ref class DesignModeValueProvider : public FeatureProvider
type DesignModeValueProvider =  
    class
        inherit FeatureProvider
    end
public class DesignModeValueProvider extends FeatureProvider

Тип DesignModeValueProvider предоставляет следующие члены.

Конструкторы

  Имя Описание
Открытый метод DesignModeValueProvider Инициализирует новый экземпляр класса DesignModeValueProvider.

В начало страницы

Свойства

  Имя Описание
Открытое свойство Properties Получает набор свойств для фиксации.

В начало страницы

Методы

  Имя Описание
Открытый метод Equals Определяет, равен ли заданный объект Object текущему объекту Object. (Унаследовано от Object.)
Защищенный метод Finalize Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)
Открытый метод GetHashCode Играет роль хэш-функции для определенного типа. (Унаследовано от Object.)
Открытый метод GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Защищенный метод InvalidateProperty Делает недействительным заданное свойство.
Защищенный метод MemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)
Открытый метод ToString Возвращение строки, представляющей текущий объект. (Унаследовано от Object.)
Открытый метод TranslatePropertyValue Фиксирует изменения свойств, внесенные пользователем в конструкторе, и использует пользовательскую логику для предоставления новых значений во время разработки.

В начало страницы

Заметки

Когда пользователь изменяет значение свойства объекта в конструкторе, это значение устанавливается в конструкторе для данного объекта. С помощью класса DesignModeValueProvider можно вставить в процесс собственную логику. Например, хотя необходимо, чтобы пользователь имел возможность установить значение false для свойства Visible элемента управления, элемент управления по-прежнему должен быть видимым во время разработки.

Для этого создается поставщик DesignModeValueProvider, который присоединяется к пользовательскому элементу управления. DesignModeValueProvider фиксирует изменения свойства, которые совершает пользователь; вставляется собственная логика в метод TranslatePropertyValue; DesignModeValueProvider передает в конструктор новые значения.

Важно!

При использовании этого способа поведение свойства в конструкторе не соответствует значению свойства в представлении XAML.Представление XAML отображает значение, введенное пользователем во время разработки.Значение в представлении XAML представляет поведение, которое свойство будет проявлять во время выполнения.

Следующие ограничения применяются при использовании класса DesignModeValueProvider для изменения значения свойства во время разработки.

  • Поставщик значений времени разработки можно задать только в типах, производных от класса DependencyObject.

  • Поставщик значений времени разработки можно задать только в свойствах зависимостей.

  • Ваша реализация DesignModeValueProvider должна установить значение времени разработки для свойства базового типа. Можно реализовать поставщик значений, ориентированный на определенный производный тип. Например для регистрации поставщика значение для свойства Height класса Button, необходимо зарегистрировать его в классе FrameworkElement и проверять целевой тип в реализации поставщика значения. Дополнительные сведения см. в разделе Пошаговое руководство. Изменение поведения свойства во время разработки.

  • Поставщики значения выполняются в порядке регистрации. Последний зарегистрированный для свойства поставщик значений выполняется последним; однако выполняются все поставщики.

  • Если реализация поставщика значения TranslatePropertyValue возвращает nullпустая ссылка (Nothing в Visual Basic), значение времени разработки свойства имеет значение nullпустая ссылка (Nothing в Visual Basic).

  • Если реализация поставщика значения TranslatePropertyValue возвращает статическое значение UnsetValue, сред. Конструктор WPF вызывает метод ClearValue свойства.

Примечание

При написании поставщика значения для элемента управления Silverlight необходимо использовать версию WPF UnsetValue.Это ограничение платформы сред. Конструктор WPF.

  • Значение поставщиков не работает с унаследованными свойствами WPF. Например регистрация поставщика значение для FlowDirection не работает должным образом в режиме конструктора.

  • Если значение свойства задано привязкой, поставщик значения должен возвращать Binding вместо вычисляемого значения.

  • Некоторые поставщики значений могут не учитываться, так как конструктор может принудительно присвоить свойству конкретное значение во время разработки для обеспечения возможностей конкретной разработки. Например поставщик пользовательского значения для свойства шрифта не работает должным образом в сред. Конструктор WPF.

  • При регистрации поставщика значение с помощью TypeIdentifier идентификатор типа, который передается в реализацию TranslatePropertyValue, может не совпадать с тем, который указан в метаданных времени разработки. Он будет эквивалентен, но может оказаться другим экземпляром. Если поставщик значение выполняет проверку типов, необходимо разрешить тип компонента идентификатора свойства и выполнить проверку эквивалентности на разрешенном типе. Обычно следует просто проверить имя свойства, но если необходимо выполнить логику с использованием типа, следует разрешить идентификатор типа. Используйте метод ResolveType, чтобы получить правильный тип.

  • Платформа сред. Конструктор WPF может передавать идентификатор типа в любой из нескольких поддерживаемых форматов. Если поставщик значения выполняет сравнение типов, необходимо разрешить идентификатор типа в фактический тип. Используйте метод ResolveType, чтобы получить правильный тип.

Примеры

В следующем примере создается настраиваемый объект DesignModeValueProvider, который присоединяется к пользовательскому элементу управления "Кнопка". В методе TranslatePropertyValue измените свойство Content элемента управления Button таким образом, чтобы содержимое этой кнопки отображалось в конструкторе строчными буквами. Также изменяется свойство Background объекта Button таким образом, чтобы в конструкторе он отображался со стандартным системным цветом. Эти изменения затрагивают только конструктор. Во время выполнения свойства Content и Background отображаются со значениями, заданными пользователем.

Дополнительные сведения см. в разделе Пошаговое руководство. Изменение поведения свойства во время разработки.



Imports System
Imports System.Windows                  'SystemColors
Imports System.Windows.Media            'SolidColorBrush
Imports System.Windows.Controls         'Button
Imports Microsoft.Windows.Design.Model  'DesignModeValueProvider
Imports Microsoft.Windows.Design.Metadata


Namespace CustomButton

    Public Class CustomButtonDesignModeValueProvider
        Inherits DesignModeValueProvider


        Public Sub New()
            Properties.Add(GetType(Button), "Content")
            Properties.Add(GetType(Button), "Background")
        End Sub



        Public Overrides Function TranslatePropertyValue( _
            ByVal item As ModelItem, _
            ByVal identifier As PropertyIdentifier, _
            ByVal value As Object) As Object

            If identifier.DeclaringType Is GetType(Button) And _
               identifier.Name = "Content" Then

                Return value.ToString().ToUpper()
            End If

            If identifier.DeclaringType Is GetType(Button) And _
               identifier.Name = "Background" Then

                Return New SolidColorBrush(SystemColors.ControlColor)
            End If

            Return MyBase.TranslatePropertyValue(item, identifier, value)
        End Function
    End Class
End Namespace


using System;
using System.Windows;                   //SystemColors
using System.Windows.Media;             //SolidColorBrush
using System.Windows.Controls;          //Button
using Microsoft.Windows.Design.Model;
using Microsoft.Windows.Design.Metadata;   //DesignModeValueProvider
namespace CustomButton
{
    class CustomButtonDesignModeValueProvider : DesignModeValueProvider
    {

        public CustomButtonDesignModeValueProvider()
        {
            Properties.Add( typeof(Button), "Content");
            Properties.Add(typeof(Button), "Background");
        }


        public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value)
        {
            if (identifier.DeclaringType == typeof( Button ) &&
                identifier.Name == "Content" )
            {
                return ((string)value).ToUpper();
            }

            if (identifier.DeclaringType == typeof(Button) &&
                identifier.Name == "Background")
            {
                return new SolidColorBrush(SystemColors.ControlColor);
            }

            return base.TranslatePropertyValue(item, identifier, value);
        }
    }
}

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

Microsoft.Windows.Design.Model - пространство имен

Другие ресурсы

Практическое руководство. Изменение поведения свойства во время разработки

Архитектура расширяемости конструктора WPF

Архитектура редактирования свойства

Поставщики функций и соединительные элементы