Compartir a través de


Cómo: Cambiar el comportamiento de una propiedad en tiempo de diseño

Cuando se usa la extensibilidad para personalizar WPF Designer for Visual Studio, normalmente se crean controles personalizados. A veces necesitará que una propiedad del control se comporte de manera diferente en tiempo de diseño y en tiempo de ejecución, y que a la vez el usuario pueda establecer el valor de la propiedad normalmente. Por ejemplo, supongamos que desea que el usuario pueda establecer la propiedad visible de un control en false, pero que el control siga estando visible en tiempo de diseño.

En este tema se describen los procedimientos para cambiar el comportamiento en tiempo de diseño de las propiedades de controles personalizados. Para obtener un ejemplo más detallado que explica los procedimientos paso a paso, vea Tutorial: Cambiar el comportamiento de una propiedad en tiempo de diseño.

Nota importanteImportante

Cuando se utiliza esta técnica, el comportamiento de una propiedad en el diseñador no coincide con el valor de la propiedad en la vista XAML. La vista XAML muestra el valor que el usuario especificó en tiempo de diseño. El valor en la vista XAML representa el comportamiento que va a mostrar la propiedad en tiempo de ejecución.

Si sólo desea determinar si un control está en tiempo de diseño y establecer sus propiedades en consecuencia, vea Cómo: Determinar si un control personalizado está en tiempo de diseño o en tiempo de ejecución.

Crear un DesignModeValueProvider personalizado

En este procedimiento creará una clase DesignModeValueProvider personalizada. En el método TranslatePropertyValue, agregue la lógica personalizada para el nuevo comportamiento de las propiedades que desea cambiar. Estos cambios sólo afectan al diseñador. En tiempo de ejecución, las propiedades se comportarán como el usuario las haya establecido.

Para crear un DesignModeValueProvider personalizado

  1. En el proyecto, agregue una referencia al siguiente ensamblado.

    • Microsoft.Windows.Design.Extensibility
  2. Agregue una nueva clase al proyecto de control personalizado y modifique la clase para heredar de DesignModeValueProvider. Debe tener este aspecto:

    
    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. Agregue un constructor a la clase. En el constructor, identifique las propiedades que desea capturar.

    
    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. Invalide el método TranslatePropertyValue en la clase. Aquí es donde se especifica el nuevo comportamiento de las propiedades en tiempo de diseño.

    
    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);
    }
    

    Nota

    En este procedimiento creará un objeto DesignModeValueProvider que administra dos propiedades diferentes. También puede crear varios objetos DesignModeValueProvider para administrar diferentes propiedades.

Asociar DesignModeValueProvider al control personalizado

En este procedimiento asociará el objeto DesignModeValueProvider al control personalizado utilizando el atributo FeatureAttribute.

Para asociar DesignModeValueProvider al control personalizado

  1. Busque la declaración de clase del control. Debe tener este aspecto:

    
    Public Class YourCustomControl
    
    
    class YourCustomControl
    
  2. Agregue un atributo FeatureAttribute a la declaración de clase y especifique el objeto DesignModeValueProvider que creó en el procedimiento anterior.

    <Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _
    Public Class YourCustomControl
    
    [Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))]
    class YourCustomControl
    

    Nota

    También puede asociar un objeto DesignModeValueProvider a un control personalizado proporcionando una tabla de atributos. Para obtener más información, vea Proporcionar metadatos en tiempo de diseño.

Vea también

Otros recursos

Comportamiento en tiempo de diseño y comportamiento en tiempo de ejecución

Introducción a la extensibilidad de WPF Designer

Extensibilidad de WPF Designer