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 | |
---|---|---|
DesignModeValueProvider | Initialisiert eine neue Instanz der DesignModeValueProvider-Klasse. |
Zum Seitenanfang
Eigenschaften
Name | Beschreibung | |
---|---|---|
Properties | Ruft den Satz der zu erfassenden Eigenschaften ab. |
Zum Seitenanfang
Methoden
Name | Beschreibung | |
---|---|---|
Equals | Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.) | |
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.) | |
GetHashCode | Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.) | |
GetType | Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.) | |
InvalidateProperty | Erklärt die angegebene Eigenschaft für ungültig. | |
MemberwiseClone | Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.) | |
ToString | Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.) | |
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