Freigeben über


DesignModeValueProvider-Klasse

Fasst Eigenschaftenänderungen zusammen, die vom Benutzer im Designer vorgenommen werden, und stellt neue Werte zur Entwurfszeit bereit.

Vererbungshierarchie

System.Object
  Microsoft.Windows.Design.Features.FeatureProvider
    Microsoft.Windows.Design.Model.DesignModeValueProvider

Namespace:  Microsoft.Windows.Design.Model
Assembly:  Microsoft.Windows.Design.Interaction (in Microsoft.Windows.Design.Interaction.dll)

Syntax

'Declaration
Public Class DesignModeValueProvider _
    Inherits FeatureProvider
public class DesignModeValueProvider : FeatureProvider
public ref class DesignModeValueProvider : public FeatureProvider
type DesignModeValueProvider =  
    class
        inherit FeatureProvider
    end
public class DesignModeValueProvider extends FeatureProvider

Der DesignModeValueProvider-Typ macht die folgenden Member verfügbar.

Konstruktoren

  Name Beschreibung
Öffentliche Methode DesignModeValueProvider Initialisiert eine neue Instanz der DesignModeValueProvider-Klasse.

Zum Seitenanfang

Eigenschaften

  Name Beschreibung
Öffentliche Eigenschaft Properties Ruft den Satz der zu erfassenden Eigenschaften ab.

Zum Seitenanfang

Methoden

  Name Beschreibung
Öffentliche Methode Equals Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte Methode InvalidateProperty Erklärt die angegebene Eigenschaft für ungültig.
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche Methode TranslatePropertyValue Erfasst Eigenschaftenänderungen, die vom Benutzer im Designer vorgenommen werden, und verwendet benutzerdefinierte Logik, um zur Entwurfszeit neue Werte bereitzustellen.

Zum Seitenanfang

Hinweise

Wenn ein Benutzer einen Eigenschaftswert eines Objekts im Designer ändert, wird dieser Wert in der Regel für das Objekt im Designer festgelegt. Mit der DesignModeValueProvider-Klasse können Sie eigene Logik in diesen Prozess einfügen. Beispielsweise soll der Benutzer die visible-Eigenschaft eines Steuerelements auf false festlegen können, das Steuerelement soll jedoch trotzdem zur Entwurfszeit sichtbar sein.

Um dies zu erreichen, erstellen Sie einen DesignModeValueProvider und fügen diesen an das benutzerdefinierte Steuerelement an. Der DesignModeValueProvider erfasst vom Benutzer vorgenommene Eigenschaftenänderungen, Sie fügen Ihre eigene Logik in die TranslatePropertyValue-Methode ein, und der DesignModeValueProvider übergibt die neuen Werte an den Designer.

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.

Die folgenden Einschränkungen sind gültig, wenn Sie zur Entwurfszeit mithilfe der DesignModeValueProvider-Klasse einen Eigenschaftswert ändern.

  • Sie können nur einen Entwurfszeitwertanbieter für Typen festlegen, die sich von der DependencyObject-Klasse ableiten.

  • Sie können nur einen Entwurfszeitwertanbieter für Abhängigkeitseigenschaften festlegen.

  • Die DesignModeValueProvider-Implementierung muss den Entwurfszeitwert in einer Basistypeigenschaft festlegen. Sie können den Wertanbieter implementieren, um auf den bestimmten abgeleiteten Typ abzuzielen. Um beispielsweise einen Wertanbieter für die Height-Eigenschaft der Button-Klasse zu registrieren, müssen Sie diesen für die FrameworkElement-Klasse registrieren und in der Wertanbieterimplementierung einen Test für den Zieltyp durchführen. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Ändern des Verhaltens einer Eigenschaft zur Entwurfszeit.

  • Wertanbieter werden in der Reihenfolge ihrer Registrierung ausgeführt. Der letzte Wertanbieter, der für eine Eigenschaft registriert wird, wird zuletzt ausgeführt; alle Wertanbieter werden jedoch ausgeführt.

  • Wenn die TranslatePropertyValue-Implementierung des Wertanbieters nullNULL-Verweis (Nothing in Visual Basic) zurückgibt, wird der Entwurfszeitwert der Eigenschaft auf nullNULL-Verweis (Nothing in Visual Basic) festgelegt.

  • Wenn die TranslatePropertyValue-Implementierung des Wertanbieters den statischen Wert UnsetValue zurückgibt, ruft WPF-Designer die ClearValue-Methode für die Eigenschaft auf.

Tipp

Wenn Sie einen Wertanbieter für ein Silverlight-Steuerelement schreiben, müssen Sie die WPF-Version von UnsetValue verwenden. Dies ist eine Einschränkung des WPF-Designer-Frameworks.

  • Wertanbieter können nicht mit geerbten Eigenschaften von WPF verwendet werden. Beispielsweise funktioniert das Registrieren eines Wertanbieters für FlowDirection im Entwurfsmodus nicht wie erwartet.

  • Wenn der Eigenschaftswert von einer Bindung festgelegt wird, muss der Wertanbieter einen Binding statt eines berechneten Werts zurückgeben.

  • Einige Wertanbieter werden möglicherweise nicht berücksichtigt, da der Designer möglicherweise eine Eigenschaft auf einen bestimmten Entwurfszeitwert erzwingen muss, um eine bestimmte Entwurfserfahrung sicherzustellen. Ein benutzerdefinierter Wertanbieter für Schriftarteigenschaften arbeitet z. B. nicht wie im WPF-Designer erwartet.

  • Wenn Sie einen Wertanbieter mit dem TypeIdentifier registrieren, ist der Typbezeichner, der an die TranslatePropertyValue-Implementierung übergeben wird, möglicherweise nicht derselbe wie der, der in den Entwurfszeitmetadaten angegeben ist. Er ist äquivalent, aber er ist möglicherweise nicht die gleiche Instanz. Wenn der Wertanbieter eine Typüberprüfung ausführt, müssen Sie die Typkomponente des Eigenschaftenbezeichners auflösen und einen Typäquivalenz-Test für den aufgelösten Typ ausführen. Normalerweise überprüfen Sie einfach den Namen der Eigenschaft, wenn jedoch eine Logik für den Typ ausgeführt werden muss, müssen Sie den Typbezeichner auflösen. Verwenden Sie die ResolveType-Methode, um den richtigen Typ abzurufen.

  • Das WPF-Designer-Framework kann einen Typbezeichner in einem von mehreren unterstützten Formaten übergeben. Wenn der Wertanbieter einen Typvergleich ausführt, müssen Sie den Typbezeichner in einen tatsächlichen Typ auflösen. Verwenden Sie die ResolveType-Methode, um den richtigen Typ abzurufen.

Beispiele

Im folgenden Beispiel wird ein benutzerdefinierter DesignModeValueProvider erstellt, der an ein benutzerdefiniertes Schaltflächensteuerelement angefügt wird. In der TranslatePropertyValue-Methode ändern Sie die Content-Eigenschaft für das Button-Element, damit es im Designer in Großbuchstaben angezeigt wird. Außerdem ändern Sie die Background-Eigenschaft für die Button, damit diese im Designer mit der Standardsystemfarbe angezeigt wird. Diese Änderungen beeinflussen nur den Designer. Zur Laufzeit werden die Background-Eigenschaft und die Content-Eigenschaft mit den vom Benutzer festgelegten Werten angezeigt.

Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Ändern des Verhaltens einer Eigenschaft zur Entwurfszeit.



Imports System
Imports System.Windows                  'SystemColors
Imports System.Windows.Media            'SolidColorBrush
Imports System.Windows.Controls         'Button
Imports Microsoft.Windows.Design.Model  'DesignModeValueProvider
Imports Microsoft.Windows.Design.Metadata


Namespace CustomButton

    Public Class CustomButtonDesignModeValueProvider
        Inherits DesignModeValueProvider


        Public Sub New()
            Properties.Add(GetType(Button), "Content")
            Properties.Add(GetType(Button), "Background")
        End Sub



        Public Overrides Function TranslatePropertyValue( _
            ByVal item As ModelItem, _
            ByVal identifier As PropertyIdentifier, _
            ByVal value As Object) As Object

            If identifier.DeclaringType Is GetType(Button) And _
               identifier.Name = "Content" Then

                Return value.ToString().ToUpper()
            End If

            If identifier.DeclaringType Is GetType(Button) And _
               identifier.Name = "Background" Then

                Return New SolidColorBrush(SystemColors.ControlColor)
            End If

            Return MyBase.TranslatePropertyValue(item, identifier, value)
        End Function
    End Class
End Namespace


using System;
using System.Windows;                   //SystemColors
using System.Windows.Media;             //SolidColorBrush
using System.Windows.Controls;          //Button
using Microsoft.Windows.Design.Model;
using Microsoft.Windows.Design.Metadata;   //DesignModeValueProvider
namespace CustomButton
{
    class CustomButtonDesignModeValueProvider : DesignModeValueProvider
    {

        public CustomButtonDesignModeValueProvider()
        {
            Properties.Add( typeof(Button), "Content");
            Properties.Add(typeof(Button), "Background");
        }


        public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value)
        {
            if (identifier.DeclaringType == typeof( Button ) &&
                identifier.Name == "Content" )
            {
                return ((string)value).ToUpper();
            }

            if (identifier.DeclaringType == typeof(Button) &&
                identifier.Name == "Background")
            {
                return new SolidColorBrush(SystemColors.ControlColor);
            }

            return base.TranslatePropertyValue(item, identifier, value);
        }
    }
}

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Siehe auch

Referenz

Microsoft.Windows.Design.Model-Namespace

Weitere Ressourcen

Gewusst wie: Ändern des Verhaltens einer Eigenschaft zur Entwurfszeit

Erweiterbare Architektur des WPF-Designers

Eigenschaftenbearbeitungsarchitektur

Featureanbieter und Featureverbindungen