Per ottimizzare la mia applicazione, creo un SharedResourceDictionary. Con questo, risparmio circa 250 mb di memoria in fase di esecuzione, quindi funziona bene.SharedResourceDictionary: modifica risorsa in Miscela
Il mio problema è in fase di progettazione, in Blend 4, non ho più accesso alla mia risorsa. Per modificare un modello (strega è nel mio file di risorse), di solito fate clic destro su mio controllo e scelgo Modifica modello -> Modifica in corso, come in questa immagine:
ho bisogno di modificare il mio template in questo modo, è 100 volte più veloce quindi di andare nel mio file di risorse e trovare quello buono ... ho un sacco di risorse ...
mio SharedResourceDictionary è implementato come questo (che si trova sul web):
public class SharedResourceDictionary : ResourceDictionary
{
/// <summary>
/// Internal cache of loaded dictionaries
/// </summary>
public static Dictionary<Uri, ResourceDictionary> _sharedDictionaries =
new Dictionary<Uri, ResourceDictionary>();
/// <summary>
/// Local member of the source uri
/// </summary>
private Uri _sourceUri;
/// <summary>
/// Gets or sets the uniform resource identifier (URI) to load resources from.
/// </summary>
public new Uri Source
{
get
{
if (IsInDesignMode)
return base.Source;
return _sourceUri;
}
set
{
_sourceUri = value;
if (!_sharedDictionaries.ContainsKey(value))
{
// If the dictionary is not yet loaded, load it by setting
// the source of the base class
base.Source = value;
// add it to the cache
_sharedDictionaries.Add(value, this);
}
else
{
// If the dictionary is already loaded, get it from the cache
MergedDictionaries.Add(_sharedDictionaries[value]);
}
}
}
/// <summary>
/// Check if we are in Blend to prevent error
/// </summary>
public bool IsInDesignMode
{
get
{
return
(bool)
DependencyPropertyDescriptor.FromProperty(DesignerProperties.IsInDesignModeProperty,
typeof(DependencyObject)).Metadata.DefaultValue;
}
}
}
Qualcuno ha un'idea se t ecco una soluzione per questo? Voglio davvero mantenere questo dizionario condiviso a causa del miglioramento della memoria, ma voglio anche modificare facilmente la mia risorsa ...
Qualsiasi indizio sarà apprezzato. Grazie.
EDIT:
In questo modo (SharedResourceDictionary), ho anche un problema con risorsa statica:
Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.
E quando li cambio di dinamica delle risorse funziona, o se cambio lo SharedResourceDictionary da un semplice ResourceDictionary funziona anche. Il progetto può essere compilato ma non posso modificare la risorsa senza una modifica come ho detto.
Penso che sarebbe anche un bene per fare riferimento alla fonte del codice di esempio: http: //www.wpftutorial.net/MergedDictionaryPerformance.html, anche la stessa sezione del commento sorgente spiega come utilizzare i dizionari delle risorse condivise in fase di progettazione. Grazie. – Ahmad
Un modo possibile per evitare questo è quello di sostituire lo SharedResourceDictionary con una semplice ResourceDictionary quando è in modalità di debug, vale a dire .: #if DEBUG public class SharedResourceDictionary: ResourceDictionary {} #else ... –
Cesario