Classe DesignModeValueProvider
Acquisisce modifiche di proprietà apportate dall'utente nella finestra di progettazione e fornisce nuovi valori in fase di progettazione.
Gerarchia di ereditarietà
System.Object
Microsoft.Windows.Design.Features.FeatureProvider
Microsoft.Windows.Design.Model.DesignModeValueProvider
Spazio dei nomi: Microsoft.Windows.Design.Model
Assembly: Microsoft.Windows.Design.Interaction (in Microsoft.Windows.Design.Interaction.dll)
Sintassi
'Dichiarazione
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
Il tipo DesignModeValueProvider espone i seguenti membri.
Costruttori
Nome | Descrizione | |
---|---|---|
DesignModeValueProvider | Inizializza una nuova istanza della classe DesignModeValueProvider. |
In alto
Proprietà
Nome | Descrizione | |
---|---|---|
Properties | Ottiene l'insieme di proprietà da acquisire. |
In alto
Metodi
Nome | Descrizione | |
---|---|---|
Equals | Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object) | |
Finalize | Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object) | |
GetHashCode | Funge da funzione hash per un determinato tipo. (Ereditato da Object) | |
GetType | Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) | |
InvalidateProperty | Invalida la proprietà specificata. | |
MemberwiseClone | Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object) | |
ToString | Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) | |
TranslatePropertyValue | Acquisisce le modifiche di proprietà apportate dall'utente nella finestra di progettazione e utilizza la logica personalizzata per fornire nuovi valori in fase di progettazione. |
In alto
Note
Quando un utente modifica il valore di una proprietà di un oggetto nella finestra di progettazione, tale valore viene in genere impostato sull'oggetto nella finestra di progettazione stessa. Utilizzando la classe DesignModeValueProvider, è possibile inserire una logica personalizzata in questo processo. Ad esempio, sebbene si desideri che l'utente sia in grado di impostare la proprietà visible di un controllo su false, il controllo dovrebbe comunque essere visibile in fase di progettazione.
Per ottenere questo risultato, viene creato un DesignModeValueProvider e allegato al controllo personalizzato. DesignModeValueProvider acquisisce le modifiche della proprietà apportate dall'utente, la logica personalizzata viene inserita nel metodo TranslatePropertyValue e l'oggetto DesignModeValueProvider passa i nuovi valori alla finestra di progettazione.
Importante |
---|
Quando si utilizza questa tecnica, il comportamento di una proprietà nella finestra di progettazione non corrisponde al valore della proprietà nella visualizzazione XAML. In quest'ultima, infatti, viene visualizzato il valore immesso dall'utente in fase di progettazione. Il valore nella visualizzazione XAML rappresenta il comportamento che la proprietà esibisce in fase di esecuzione. |
Le restrizioni riportate di seguito si applicano quando si utilizza la classe DesignModeValueProvider per modificare in fase di progettazione un valore della proprietà.
È possibile impostare solo un provider del valore in fase di progettazione su tipi che derivano dalla classe DependencyObject.
È possibile impostare solo un provider del valore in fase di progettazione sulle proprietà di dipendenza.
L'implementazione DesignModeValueProvider deve impostare il valore in fase di progettazione su una proprietà del tipo di base. È possibile implementare il provider del valore in modo da avere il tipo derivato specifico come destinazione. Ad esempio, per registrare un provider di valori per la proprietà Height della classe Button è necessario registrarlo sulla classe FrameworkElement e testare il tipo di destinazione nell'implementazione del provider del valore. Per ulteriori informazioni, vedere Procedura dettagliata: modifica del comportamento di una proprietà in fase di progettazione.
I provider di valori vengono eseguiti nell'ordine in cui sono registrati. Il più recente provider di valori registrato per una proprietà viene eseguito per ultimo; tuttavia, vengono eseguiti tutti i provider di valori.
Se l'implementazione del provider di valori TranslatePropertyValue restituisce nullriferimento null (Nothing in Visual Basic), il valore della proprietà in fase di progettazione viene impostato su nullriferimento null (Nothing in Visual Basic).
Se l'implementazione del provider di valori TranslatePropertyValue restituisce il valore statico UnsetValue, WPF Designer chiama il metodo ClearValue sulla proprietà.
Nota
Se si scrive un provider di valore per un controllo Silverlight, è necessario utilizzare la versione WPF di UnsetValue. Si tratta di un limite del framework WPF Designer.
I provider di valori non funzionano con le proprietà ereditate WPF. Ad esempio, la registrazione di un provider del valore per FlowDirection non funziona come previsto in modalità progettazione.
Se il valore della proprietà viene impostato da un'associazione, il provider del valore deve restituire un Binding anziché un valore calcolato.
Alcuni provider di valori possono non venire rispettati perché potrebbe essere necessario chiedere alla finestra di progettazione di forzare una proprietà a un valore di progettazione specifico al fine di garantire una particolare progettazione. Ad esempio, nelle proprietà del carattere un provider di valori personalizzato non funziona come previsto da WPF Designer.
Quando si registra un provider del valore tramite TypeIdentifier, l'identificatore di tipo passato all'implementazione di TranslatePropertyValue può non corrispondere a quello che viene specificato nei metadati in fase di progettazione. Sarà equivalente, ma potrebbe non essere la stessa istanza. Se il provider di valori esegue un controllo del tipo, è necessario risolvere il componente del tipo dell'identificatore della proprietà ed eseguire un test dell'equivalenza del tipo sul tipo risolto. Generalmente, si controlla semplicemente il nome della proprietà, ma se è necessario eseguire la logica sul tipo, è necessario risolvere l'identificatore di tipo. Utilizzare il metodo ResolveType per ottenere il tipo corretto.
È possibile che il framework WPF Designer passi un identificatore di tipo adottando vari formati supportati. Se il provider del valore esegue un confronto tra tipi, è necessario risolvere l'identificatore di tipo a un tipo effettivo. Utilizzare il metodo ResolveType per ottenere il tipo corretto.
Esempi
Nell'esempio seguente viene creato un oggetto DesignModeValueProvider personalizzato che viene associato a un controllo pulsante personalizzato. Nel metodo TranslatePropertyValue, modificare la proprietà Content di Button in modo che venga visualizzato in lettere maiuscole nella finestra di progettazione. Viene inoltre modificata la proprietà Background dell'oggetto Button in modo che venga visualizzata con il colore di sistema predefinito nella finestra di progettazione. Queste modifiche vengono applicate solo nella finestra di progettazione. In fase di esecuzione, le proprietà Content e Background vengono visualizzate con i valori impostati dall'utente.
Per ulteriori informazioni, vedere Procedura dettagliata: modifica del comportamento di una proprietà in fase di progettazione.
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);
}
}
}
Codice thread safe
Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Vedere anche
Riferimenti
Spazio dei nomi Microsoft.Windows.Design.Model
Altre risorse
Procedura: modificare il comportamento di una proprietà in fase di progettazione
Architettura di estensibilità di Progettazione WPF