Практическое руководство. Изменение поведения свойства во время разработки
При использовании расширяемости среды для настройки Конструктор WPF для Visual Studio часто создаются пользовательские элементы управления. Иногда требуется, чтобы свойство элемента управления вело себя по-разному во время разработки и во время выполнения, несмотря на то что пользователю позволено устанавливать значение свойства обычным образом. Например, требуется, чтобы пользователь имел возможность установить значение false для свойства "Visible", но элемент управления по-прежнему должен быть видимым во время разработки.
В этом разделе описываются процедуры изменения поведения свойств пользовательских элементов управления во время разработки. Более подробный пример с пошаговым описанием процедур см. в разделе Пошаговое руководство. Изменение поведения свойства во время разработки.
Важно!
При использовании этого способа поведение свойства в конструкторе не соответствует значению свойства в представлении XAML.Представление XAML отображает значение, введенное пользователем во время разработки.Значение в представлении XAML представляет поведение, которое свойство будет проявлять во время выполнения.
Если нужно только определить, находится ли элемент управления в режиме разработки, и задать его свойства соответствующим образом, см. раздел Практическое руководство. Определение режима, в котором находится пользовательский элемент управления (режим разработки или режиме выполнения).
Создание пользовательского класса "DesignModeValueProvider"
В этой процедуре создается пользовательский класс DesignModeValueProvider. В методе TranslatePropertyValue добавляется пользовательская логика для нового поведения свойств, которые требуется изменить. Эти изменения затрагивают только конструктор. Во время выполнения поведение свойств соответствует установкам пользователя.
Создание пользовательского класса "DesignModeValueProvider"
В проекте добавьте ссылку на следующую сборку:
- Microsoft.Windows.Design.Extensibility
Добавьте новый класс к проекту пользовательского элемента управления и измените класс для наследования от класса DesignModeValueProvider. Код должен выглядеть следующим образом:
Public Class YourCustomDesignModeValueProvider Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider End Class
class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider { }
Добавьте в класс конструктор. В конструкторе можно определить свойства, которые требуется фиксировать.
Public Sub New() 'Properties.Add(<The Property To Change Goes Here>) 'More properties can go here. End Sub
public YourCustomDesignModeValueProvider() { //Properties.Add(<The Property To Change Goes Here>); //More properties can go here. }
Переопределите метод TranslatePropertyValue в классе. Здесь указывается новое поведение свойств во время разработки.
Public Overrides Function TranslatePropertyValue( _ ByVal item As ModelItem, _ ByVal identifier As PropertyIdentifier, _ ByVal value As Object) As Object 'If identifier.Name = <Name of the property to change> Then ' ' Custom logic goes here. 'End If 'More custom logic for more properties can go here. Return MyBase.TranslatePropertyValue(item, identifier, value) End Function
public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value) { //if (identifier.Name == <Name of the property to change>) //{ // Custom logic goes here. //} //More custom logic for more properties can go here. return base.TranslatePropertyValue(item, identifier, value); }
Примечание
В этой процедуре создается один экземпляр DesignModeValueProvider, который обрабатывает два различных свойства.Также для обработки различных свойств можно создать несколько экземпляров DesignModeValueProvider.
Присоединение класса "DesignModeValueProvider" к пользовательскому элементу управления
В этой процедуре класс DesignModeValueProvider присоединяется к пользовательскому элементу управления с помощью атрибута FeatureAttribute.
Присоединение класса "DesignModeValueProvider" к пользовательскому элементу управления
Найдите объявление класса для пользовательского элемента управления. Код должен выглядеть следующим образом:
Public Class YourCustomControl
class YourCustomControl
Добавьте атрибут FeatureAttribute к объявлению класса и укажите экземпляр DesignModeValueProvider, созданный в предыдущей процедуре.
<Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _ Public Class YourCustomControl
[Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))] class YourCustomControl
Примечание
Можно также присоединить DesignModeValueProvider к пользовательскому элементу управления, предоставив таблицу атрибутов.Дополнительные сведения см. в разделе Предоставление метаданных времени разработки.
См. также
Другие ресурсы
Сравнение поведения во время разработки и во время выполнения