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
Metodo pubblico DesignModeValueProvider Inizializza una nuova istanza della classe DesignModeValueProvider.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica Properties Ottiene l'insieme di proprietà da acquisire.

In alto

Metodi

  Nome Descrizione
Metodo pubblico Equals Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protetto 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)
Metodo pubblico GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo protetto InvalidateProperty Invalida la proprietà specificata.
Metodo protetto MemberwiseClone Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico 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.

Nota importanteImportante

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

Architettura di modifica delle proprietà

Provider di funzionalità e connettori di funzionalità