Architettura di modifica delle proprietà

La modifica visiva delle proprietà degli oggetti è una funzionalità importante di WPF Designer per Visual Studio. In questo argomento viene descritta l'architettura del sistema di modifica delle proprietà di WPF Designer.

Voce di proprietà

La classe PropertyEntry rappresenta la proprietà stessa. La classe PropertyValue rappresenta il valore sottostante di una proprietà.

Editor di categorie

Un editor di categorie consente all'utente finale di modificare contemporaneamente più proprietà all'interno di una categoria. Le proprietà associate a un editor di categorie non vengono visualizzate in nessun altro punto nella finestra Proprietà. Le proprietà che non sono modificate tramite l'editor di categorie saranno visibili e modificabili. È possibile specificare quali proprietà all'interno di una categoria vengono modificate tramite un editor di categorie.

Editor di valori delle proprietà

Un editor di valori delle proprietà consente di definire il modo in cui un particolare tipo viene visualizzato e modificato nella finestra Proprietà di una finestra di progettazione visiva. Il ruolo degli editor dei valori delle proprietà in WPF Designer è simile a quello della classe UITypeEditor nell'architettura System.ComponentModel. Gli editor di WPF Designer sono tuttavia indipendenti dalle architetture System.ComponentModel e Windows Form.

Un PropertyValueEditor dispone delle parti elencate nella tabella seguente.

Parte di un editor dei valori di proprietà

Descrizione

Editor in linea (anche chiamato la visualizzazione)

Un editor ospitato nello stesso spazio fisico della visualizzazione nella finestra Proprietà host. Ad esempio, l'editor della proprietà Margin.

Editor esteso

Un editor che non è in genere ospitato sul posto. Si tratta dell'equivalente dell'editor di stili a discesa nell'architettura System.ComponentModel. Ad esempio, l'editor della proprietà HorizontalAlignment.

Finestra di dialogo

Un editor implementato nella relativa finestra di dialogo. Ad esempio, l'editor della proprietà RowDefinitions.

È possibile utilizzare impostazioni predefinite per le parti editor in linea e visualizzazione. Un PropertyValueEditor non deve necessariamente fornire una parte editor esteso.

Ciascuna parte è un DataTemplate WPF. Ciascuna parte è indipendente dalle altre e può essere utilizzata in modo indipendente.

La finestra Proprietà host fornisce il frame intorno alla visualizzazione e agli editor. Questo consente all'host di fornire un stile coerente tra gli editor e consente ai differenti host di fornire stili diversi. Ad esempio, Expression Blend e Visual Studio forniscono entrambi un aspetto e un comportamento differenti per le rispettive finestre Proprietà.

L'associazione di dati WPF e un insieme standard di oggetti RoutedCommand WPF forniscono il meccanismo di comunicazione tra l'host e le parti dell'PropertyValueEditor.

Nel più semplice dei casi, una parte dell'editor di valori può essere un DataTemplate che contiene i controlli standard WPF. Nei casi più complessi, una parte del tipo può essere un DataTemplate che fa riferimento al controllo personalizzato.

È possibile implementare tre tipi diversi di editor di valori delle proprietà, come indicato nella tabella seguente.

Tipo di editor dei valori di proprietà

Descrizione

Simple

L'editor di valori di proprietà è costituito da un editor in linea.

Esteso

L'editor di valori di proprietà è costituito da un editor in linea e da uno esteso.

Finestra di dialogo

L'editor di valori di proprietà è costituito da un editor in linea e da una finestra di dialogo.

Classi dell'infrastruttura

Le classi dell'infrastruttura sono richieste per qualsiasi implementazione dell'editor di valore di proprietà. Queste classi sono elencate nella tabella seguente e sono costituite dall'infrastruttura principale per ospitare o creare editor di valori.

Classe dell'infrastruttura

Descrizione

PropertyValue

Rappresenta il valore di una proprietà.

PropertyValueEditor

La classe base per gli editor di valori.

PropertyValueEditorCommands

I tipi di RoutedCommand e le implementazioni predefinite di gestori per quei comandi.

DialogPropertyValueEditor

La classe base astratta per gli editor di valori a finestra di dialogo.

  • Definisce il comando ShowDialog e un gestore predefinito per quel comando.

  • Dispone di un modello di editor in linea e di visualizzazione predefinito.

  • Contrassegna un PropertyValueEditor come editor a finestra di dialogo.

Implementazione di editor di valori di proprietà

Nelle sezioni seguenti vengono descritti gli aspetti dell'implementazione di un editor di valori di proprietà.

Valore, StringValue e insieme

Il modello PropertyValue dispone di tre proprietà correlate al valore della proprietà. Queste proprietà PropertyValue sono elencate nella tabella seguente.

Proprietà PropertyValue

Descrizione

Value

Una rappresentazione a oggetto dei dati.

StringValue

Una rappresentazione in forma di stringa dei dati, che può essere utilizzata per la visualizzazione o la serializzazione.

Collection

Una rappresentazione in forma di insieme dei dati.

StringValue è una rappresentazione in forma di stringa dei dati che può essere utilizzata per la visualizzazione o la serializzazione. Value e StringValue memorizzano nella cache qualsiasi chiamata del set.

La cache per StringValue viene scaricata quando viene impostato il valore Value. Uno scenario tipico consiste nel supportare l'aggiornamento dinamico della proprietà progettata (come digitata dall'utente), dove StringValue è associato a dati alla voce di testo. Tuttavia, la proprietà sottostante viene impostata solo quando il testo dinamico soddisfa determinati criteri.

Requisiti dell'editor di valori di proprietà

Un editor di valori di proprietà correttamente implementato deve soddisfare i requisiti seguenti.

  • L'editor di valori di proprietà deve essere progettato in modo che le parti editor in linea ed editor esteso possano essere utilizzate in modo indipendente.

  • Un editor di valori di proprietà non deve memorizzare lo stato. Gli editor di valori di proprietà sono indipendenti dallo stato, possono essere memorizzati nella cache da un'implementazione host e possono essere utilizzati nuovamente tra più valori di proprietà.

  • Un editor di valori di proprietà non deve presupporre che solo un controllo della parte (visualizzazione/in linea/esteso) di editor di valori sia attivo in un dato momento. Ad esempio, una finestra di dialogo può avere la parte di visualizzazione, la parte in linea e la parte dell'interfaccia utente estesa attive contemporaneamente.

  • Un controllo implementato come parte di un editor di valori di proprietà non deve memorizzare lo stato. Un controllo implementato come parte di un editor di valori non deve presupporre che sarà associato solo a un unico valore di proprietà. I controlli possono essere riciclati per modificare valori di proprietà differenti. Qualsiasi informazione memorizzata nella cache deve essere eliminata se il modello di dati viene aggiornato.

  • Un controllo implementato come parte di un editor di valori di proprietà non deve fare supposizioni sull'host o i relativi controlli padre. Gli unici meccanismi di comunicazione che devono essere utilizzati sono il modello di dati PropertyValue, per mezzo di DataContext, e l'insieme di comandi standard.

Vedere anche

Riferimenti

PropertyEntry

PropertyValue

PropertyValueEditor

Altre risorse

Estensibilità di Progettazione WPF

Creazione di editor personalizzati

Esempi di estensibilità di WPF Designer