Практическое руководство. Изменение поведения свойства во время разработки
Обновлен: Ноябрь 2007
При использовании расширяемости среды для настройки Windows Presentation Foundation (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 identifier As Microsoft.Windows.Design.Model.PropertyIdentifier, ByVal value As Object) As Object 'If identifier.DependencyProperty Is <Property To Change> Then ' ' Custom logic goes here. 'End If 'More custom logic for more properties can go here. Return MyBase.TranslatePropertyValue(identifier, value) End Function
public override object TranslatePropertyValue(Microsoft.Windows.Design.Model.PropertyIdentifier identifier, object value) { //if (identifier.DependencyProperty == <The Property To Change>) //{ // Custom logic goes here. //} //More custom logic for more properties can go here. return base.TranslatePropertyValue(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 к пользовательскому элементу управления с помощью хранилища метаданных. Дополнительные сведения см. в разделах Хранилище метаданных и Практическое руководство. Использование хранилища метаданных.
См. также
Другие ресурсы
Сравнение поведения во время разработки и во время выполнения