Freigeben über


Gewusst wie: Ändern des Verhaltens einer Eigenschaft zur Entwurfszeit

Wenn Sie den WPF Designer für Visual Studio mithilfe der Erweiterbarkeit anpassen, ist es häufig notwendig, benutzerdefinierte Steuerelemente zu erstellen. Manchmal soll sich eine Eigenschaft des Steuerelements zur Entwurfszeit anders verhalten als zur Laufzeit, wobei der Benutzer jedoch den Wert der Eigenschaft auf normale Weise festlegen kann. Beispielsweise soll der Benutzer die visible-Eigenschaft eines Steuerelement auf false festlegen können, das Steuerelement soll jedoch trotzdem zur Entwurfszeit sichtbar sein.

In diesem Thema werden die Verfahren zum Ändern des Entwurfszeitverhaltens der Eigenschaften benutzerdefinierter Steuerelemente beschrieben. Ein ausführlicheres Beispiel, in dem Sie schrittweise durch die Prozeduren geführt werden, finden Sie unter Exemplarische Vorgehensweise: Ändern des Verhaltens einer Eigenschaft zur Entwurfszeit.

Wichtig

Wenn Sie dieses Verfahren verwenden, entspricht das Verhalten einer Eigenschaft im Designer nicht dem Wert der Eigenschaft in der XAML-Ansicht. In der XAML-Ansicht wird der Wert angezeigt, den der Benutzer zur Entwurfszeit eingegeben hat. Der Wert in der XAML-Ansicht stellt das Verhalten dar, das die Eigenschaft zur Laufzeit zeigt.

Wenn Sie nur ermitteln möchten, ob sich ein Steuerelement in der Entwurfszeit befindet, und seine Eigenschaften entsprechend festlegen möchten, finden Sie weitere Informationen unter Gewusst wie: Bestimmen, ob sich ein benutzerdefiniertes Steuerelement in der Entwurfszeit oder der Laufzeit befindet.

Erstellen eines benutzerdefinierten DesignModeValueProvider

In dieser Prozedur erstellen Sie eine benutzerdefinierte DesignModeValueProvider-Klasse. In der TranslatePropertyValue-Methode fügen Sie benutzerdefinierte Logik für das neue Verhalten der Eigenschaften hinzu, das Sie ändern möchten. Diese Änderungen beeinflussen nur den Designer. Zur Laufzeit verhalten sich die Eigenschaften wie vom Benutzer festgelegt.

So erstellen Sie einen benutzerdefinierten DesignModeValueProvider

  1. Fügen Sie im Projekt einen Verweis auf die folgende Assembly hinzu:

    • Microsoft.Windows.Design.Extensibility
  2. Fügen Sie dem benutzerdefinierten Steuerelementprojekt eine neue Klasse hinzu, und bearbeiten Sie die Klasse so, dass sie von DesignModeValueProvider erbt. Sie sollte wie folgt aussehen:

    
    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. Fügen Sie der Klasse einen Konstruktor hinzu. Im Konstruktor identifizieren Sie die Eigenschaften, die Sie aufzeichnen möchten.

    
    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. Überschreiben Sie die TranslatePropertyValue-Methode in der Klasse. Hier geben Sie das neue Verhalten der Eigenschaften zur Entwurfszeit an.

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

    Tipp

    In dieser Prozedur erstellen Sie einen DesignModeValueProvider, der zwei verschiedene Eigenschaften behandelt. Sie können auch mehrere DesignModeValueProvider-Objekte erstellen, um verschiedene Eigenschaften zu behandeln.

Anfügen des DesignModeValueProvider an das benutzerdefinierte Steuerelement

In dieser Prozedur fügen Sie den DesignModeValueProvider mit dem FeatureAttribute-Attribut an das benutzerdefinierte Steuerelement an.

So fügen Sie den DesignModeValueProvider an das benutzerdefinierte Steuerelement an

  1. Suchen Sie die Klassendeklaration für das benutzerdefinierte Steuerelement. Sie sollte wie folgt aussehen:

    
    Public Class YourCustomControl
    
    
    class YourCustomControl
    
  2. Fügen Sie der Klassendeklaration ein FeatureAttribute-Attribut hinzu, und geben Sie den DesignModeValueProvider an, den Sie im vorherigen Verfahren erstellt haben.

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

    Tipp

    Sie können auch einen DesignModeValueProvider an ein benutzerdefiniertes Steuerelement anfügen, indem Sie eine Attributtabelle bereitstellen. Weitere Informationen finden Sie unter Bereitstellen von Entwurfszeitmetadaten.

Siehe auch

Weitere Ressourcen

Vergleich zwischen Entwurfszeit- und Laufzeitverhalten

WPF-Designer-Erweiterbarkeit

WPF-Designer-Erweiterbarkeit