Partager via


Comment : modifier le comportement d'une propriété au moment du design

Lorsque vous utilisez l'extensibilité pour personnaliser le Concepteur WPF pour Visual Studio, vous créez souvent des contrôles personnalisés. Toutefois, vous souhaitez parfois qu'une propriété du contrôle se comporte différemment au moment du design qu'au moment de l'exécution, tout en permettant à l'utilisateur de définir normalement la valeur de la propriété. Par exemple, vous souhaitez que l'utilisateur puisse affecter la valeur false à la propriété visible d'un contrôle, mais celui-ci doit rester visible au moment du design.

Cette rubrique décrit les procédures à suivre pour modifier le comportement au moment du design de propriétés de contrôles personnalisés. Pour obtenir un exemple plus détaillé des procédures, consultez Procédure pas à pas : modification du comportement d'une propriété au moment du design.

Important

Lorsque vous utilisez cette technique, le comportement d'une propriété dans le concepteur ne correspond pas à la valeur de la propriété en mode XAML. En effet, le mode XAML affiche la valeur que l'utilisateur a entrée au moment du design. La valeur en mode XAML représente le comportement de la propriété au moment de l'exécution.

Si vous souhaitez uniquement déterminer qu'un contrôle est un contrôle DTC et définir ses propriétés en conséquence, consultez Comment : déterminer si un contrôle personnalisé est un contrôle DTC ou un contrôle runtime.

Création d'un DesignModeValueProvider personnalisé

Dans cette procédure, vous créez une classe DesignModeValueProvider personnalisée. Dans la méthode TranslatePropertyValue, vous ajoutez la logique personnalisée pour le nouveau comportement des propriétés à modifier. Ces modifications concernent le concepteur uniquement. Au moment de l'exécution, les propriétés se comportent telles que définies par l'utilisateur.

Pour créer un DesignModeValueProvider personnalisé

  1. Dans votre projet, ajoutez une référence à l'assembly suivant :

    • Microsoft.Windows.Design.Extensibility
  2. Ajoutez une nouvelle classe à votre projet de contrôle personnalisé et modifiez la classe pour qu'elle hérite de DesignModeValueProvider. Elle doit se présenter comme suit :

    
    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. Ajoutez un constructeur à la classe. Dans le constructeur, vous identifiez les propriétés à capturer.

    
    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. Substituez la méthode TranslatePropertyValue de la classe. C'est ici que vous spécifiez le nouveau comportement des propriétés au moment du design.

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

    Notes

    Dans cette procédure, vous créez un DesignModeValueProvider qui gère deux propriétés différentes. Vous pouvez également créer plusieurs objets DesignModeValueProvider pour gérer des propriétés différentes.

Attachement de DesignModeValueProvider au contrôle personnalisé

Dans cette procédure, vous attachez DesignModeValueProvider à votre contrôle personnalisé à l'aide de l'attribut FeatureAttribute.

Pour attacher DesignModeValueProvider au contrôle personnalisé

  1. Localisez la déclaration de classe de votre contrôle personnalisé. Elle doit se présenter comme suit :

    
    Public Class YourCustomControl
    
    
    class YourCustomControl
    
  2. Ajoutez un attribut FeatureAttribute à la déclaration de classe, puis spécifiez le DesignModeValueProvider que vous avez créé dans la procédure précédente.

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

    Notes

    Vous pouvez également attacher un DesignModeValueProvider à un contrôle personnalisé en fournissant une table d'attributs. Pour plus d'informations, consultez Mise à disposition de métadonnées au moment du design.

Voir aussi

Autres ressources

Comportement au moment du design et au moment de l'exécution

Fonctionnement de l'extensibilité du Concepteur WPF

Extensibilité du Concepteur WPF