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