Поделиться через


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

Обновлен: Ноябрь 2007

При использовании расширяемости среды для настройки Windows Presentation Foundation (WPF) для Visual Studio (конструктор) часто создаются пользовательские элементы управления. Иногда требуется, чтобы свойство элемента управления вело себя по-разному во время разработки и во время выполнения, несмотря на то что пользователю позволено устанавливать значение свойства обычным образом. Например, требуется, чтобы пользователь имел возможность установить значение false для свойства «Visible», но элемент управления по-прежнему должен быть видимым во время разработки.

В этом разделе описываются процедуры изменения поведения свойств пользовательских элементов управления во время разработки. Более подробный пример с пошаговым описанием процедур см. в разделе Пошаговое руководство. Изменение поведения свойства во время разработки.

Bb514633.alert_caution(ru-ru,VS.90).gifВажное примечание.

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

Если нужно только определить, находится ли элемент управления в режиме разработки, и задать его свойства соответствующим образом, см. раздел Практическое руководство. Определение режима, в котором находится пользовательский элемент управления (режим разработки или режиме выполнения).

Создание пользовательского класса «DesignModeValueProvider»

В этой процедуре создается пользовательский класс DesignModeValueProvider. В методе TranslatePropertyValue добавляется пользовательская логика для нового поведения свойств, которые требуется изменить. Эти изменения затрагивают только конструктор. Во время выполнения поведение свойств соответствует установкам пользователя.

Создание пользовательского класса «DesignModeValueProvider»

  1. В проекте добавьте ссылку на следующую сборку:

    • Microsoft.Windows.Design.Extensibility
  2. Добавьте новый класс к проекту пользовательского элемента управления и измените класс для наследования от класса DesignModeValueProvider. Код должен выглядеть следующим образом:

    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. Добавьте в класс конструктор. В конструкторе можно определить свойства, которые требуется фиксировать.

    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.
    }
    
  4. Переопределите метод 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);
    }
    
    Bb514633.alert_note(ru-ru,VS.90).gifПримечание.

    В этой процедуре создается один экземпляр DesignModeValueProvider, который обрабатывает два различных свойства. Также для обработки различных свойств можно создать несколько экземпляров DesignModeValueProvider.

Присоединение класса «DesignModeValueProvider» к пользовательскому элементу управления

В этой процедуре класс DesignModeValueProvider присоединяется к пользовательскому элементу управления с помощью атрибута FeatureAttribute.

Присоединение класса «DesignModeValueProvider» к пользовательскому элементу управления

  1. Найдите объявление класса для пользовательского элемента управления. Код должен выглядеть следующим образом:

    Public Class YourCustomControl
    
    class YourCustomControl
    
  2. Добавьте атрибут FeatureAttribute к объявлению класса и укажите экземпляр DesignModeValueProvider, созданный в предыдущей процедуре.

    <Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _
    Public Class YourCustomControl
    
    [Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))]
    class YourCustomControl
    
    Bb514633.alert_note(ru-ru,VS.90).gifПримечание.

    Можно также присоединить класс DesignModeValueProvider к пользовательскому элементу управления с помощью хранилища метаданных. Дополнительные сведения см. в разделах Хранилище метаданных и Практическое руководство. Использование хранилища метаданных.

См. также

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

Сравнение поведения во время разработки и во время выполнения

Общее представление о расширяемости конструктора WPF

Расширяемость среды конструктора WPF