Metodo Freezable.Clone
Aggiornamento: novembre 2007
Crea un clone modificabile dell'oggetto Freezable corrente, eseguendo copie complete dei valori dell'oggetto. In caso di copia delle proprietà di dipendenza dell'oggetto, questo metodo copia le espressioni (che non potrebbe più risolvere) ma non le animazioni o i valori correnti.
Assembly: WindowsBase (in WindowsBase.dll)
public Freezable Clone()
public function Clone() : Freezable
Non è possibile utilizzare metodi in XAML.
Valore restituito
Tipo: System.Windows.FreezableClone modificabile dell'oggetto corrente. La proprietà IsFrozen dell'oggetto clone restituisce il valore false anche se il valore della proprietà IsFrozen dell'oggetto di origine è true.
I metodi Clone e CloneCurrentValue producono cloni modificabili di oggetti bloccati Freezable (i metodi duplicano anche oggetti Freezable che non sono bloccati). Il clone è effettivamente una copia completa dell'oggetto corrente.
Nella tabella riportata di seguito vengono riepilogate alcune delle differenze tra i metodi Clone e CloneCurrentValue.
Azione | Duplicare il comportamento del metodo | Comportamento del metodo CloneCurrentValue |
|---|---|---|
Copia di una proprietà di dipendenza che ha un'espressione | L'espressione è copiata, ma potrebbe non risolvere più. Per ulteriori informazioni, vedere Cenni preliminari sugli oggetti Freezable. | Il valore corrente dell'espressione è copiato, ma non l'espressione stessa. |
Copia di una proprietà di dipendenza animata | Il valore di base (non-animato) della proprietà è copiato. Le animazioni non sono copiate. | Il valore corrente animato della proprietà è copiato. Le animazioni non sono copiate. |
Notare che le proprietà che annullano l’impostazione non sono copiate. Se una proprietà che annulla l'impostazione ha un valore predefinito che è un Freezablebloccato, quel valore della proprietà rimane bloccato in un clone altrimenti modificabile.
Spostare un Freezable tra Thread
Questo metodo può essere utile per spostare Freezable tra thread. Per prima cosa, rendere Freezable immodificabile chiamando il metodo Freeze. Ora un altro thread può accedere a Freezable e può fare Clone locale a cui può accedere.
Questo metodo utilizza CloneCore per produrre il clone. Per modificare il comportamento di questo metodo in una classe derivata, eseguire l'override del metodo CloneCore.
In questo esempio viene illustrato come utilizzare il metodo Clone per creare una copia scrivibile di un oggetto Freezable di sola lettura.
Dopo che un oggetto Freezable viene contrassegnato come di sola lettura (bloccato), non è possibile modificarlo. Tuttavia, è possibile utilizzare il metodo Clone per creare un duplicato modificabile dell'oggetto bloccato.
Nell'esempio seguente viene creato un duplicato modificabile di un oggetto SolidColorBrush bloccato.
Button myButton = new Button(); SolidColorBrush myBrush = new SolidColorBrush(Colors.Yellow); // Freezing a Freezable before it provides // performance improvements if you don't // intend on modifying it. if (myBrush.CanFreeze) { // Makes the brush unmodifiable. myBrush.Freeze(); } myButton.Background = myBrush; // If you need to modify a frozen brush, // the Clone method can be used to // create a modifiable copy. SolidColorBrush myBrushClone = myBrush.Clone(); // Changing myBrushClone does not change // the color of myButton, because its // background is still set by myBrush. myBrushClone.Color = Colors.Red; // Replacing myBrush with myBrushClone // makes the button change to red. myButton.Background = myBrushClone;
Per ulteriori informazioni sugli oggetti Freezable, vedere Cenni preliminari sugli oggetti Freezable.
Windows Vista
.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.