Para optimizar mi aplicación, creo un SharedResourceDictionary. Con esto, guardo unos 250 mb de memoria en tiempo de ejecución, por lo que funciona bien.SharedResourceDictionary: edite el recurso en Blend
Mi problema está en el tiempo de diseño, en Blend 4, no tengo más acceso a mi recurso. Para modificar una plantilla (bruja está en mi archivo de recursos), por lo general clic derecho sobre mi control y elijo Editar plantilla -> Editar actual, como en esta imagen:
tengo que modificar mi la plantilla de esa manera, es 100 veces más rápido que ir en mi archivo de recursos y encontrar el bueno ... tengo un montón de recursos ...
mi SharedResourceDictionary se implementa de la siguiente (que se encuentra en la 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;
}
}
}
Alguien tiene una idea si t aquí hay una solución para esto? Realmente quiero mantener este diccionario compartido debido a la mejora de la memoria, pero también quiero modificar mi recurso fácilmente ...
Cualquier pista será apreciada. Gracias.
EDIT:
Hacer esto (SharedResourceDictionary), también tengo un problema con recurso estático:
Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.
Y cuando las cambio de dinámica de recursos funciona, o si cambio de la SharedResourceDictionary por un ResourceDictionary simple también funciona. El proyecto puede compilar pero no puedo editar el recurso sin una modificación, como dije.
creo que sería bueno también para hacer referencia a la fuente de su código de ejemplo: http: //www.wpftutorial.net/MergedDictionaryPerformance.html, también la misma sección de comentario fuente explica cómo hacer uso de diccionarios de recursos compartidos en tiempo de diseño. Gracias. – Ahmad
Una posible manera de evitar esto es reemplazar el SharedResourceDictionary con un simple ResourceDictionary cuando se encuentra en modo de depuración, es decir .: #if DEBUG clase pública SharedResourceDictionary: ResourceDictionary {} #else ... –
Cesario