Aby zoptymalizować moją aplikację, tworzę obiekt SharedResourceDictionary. Dzięki temu oszczędzam około 250 MB pamięci podczas działania, więc działa dobrze.SharedResourceDictionary: edytuj zasób w mieszance
Mój problem dotyczy czasu projektowania, w Blend 4, nie mam już dostępu do mojego zasobu. Aby zmodyfikować szablon (wiedźma jest w moim pliku zasobów), zwykle prawym przyciskiem myszy na moją kontrolą i wybrać Edycja szablonu -> Edit prąd, jak na tym zdjęciu:
muszę zmodyfikować moje szablon drogę, to 100x szybciej niż iść w moim pliku zasobów i znaleźć dobry ... mam dużo zasobów ...
Moja SharedResourceDictionary jest realizowany tak (znalezione w internecie):
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;
}
}
}
Ktoś ma pomysł, jeśli t tutaj jest rozwiązanie tego? Naprawdę chcę zachować ten wspólny słownik ze względu na poprawę pamięci, ale chcę też łatwo zmodyfikować moje zasoby ...
Każda wskazówka zostanie doceniona. Dziękuję Ci.
EDIT:
Robi to (SharedResourceDictionary), ja też mam problem z zasobem statycznej:
Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.
I kiedy je zmienić na dynamiczny zasób to działa, czy mogę zmienić SharedResourceDictionary przez prosty ResourceDictionary również działa. Projekt może się kompilować, ale nie mogę edytować zasobu bez modyfikacji, jak już powiedziałem.
myślę, że byłoby dobrze, aby odwoływać się także źródła próbki kodu: http: //www.wpftutorial.net/MergedDictionaryPerformance.html, ta sama sekcja komentarza źródłowego wyjaśnia, w jaki sposób korzystać ze współdzielonych słowników zasobów w czasie projektowania. Dzięki. – Ahmad
Możliwym sposobem na uniknięcie tego jest zastąpienie SharedResourceDictionary z prostym ResourceDictionary w trybie debugowania, tj .: #if DEBUG public class SharedResourceDictionary: ResourceDictionary { } #else ... –
Cesario