アプリケーションを最適化するために、SharedResourceDictionary を作成します。これにより、実行時に約 250 MB のメモリを節約できるので、うまく機能します。
私の問題は設計時にあります。Blend 4 では、自分のリソースにアクセスできなくなりました。テンプレートを変更するには (魔女は私のリソース ファイルにあります)、通常はコントロールを右クリックし、次の画像のように [テンプレートの編集] --> [現在の編集] を選択します。
テンプレートをそのように変更する必要があります。リソース ファイルに移動して適切なファイルを見つけるよりも 100 倍高速です...リソースがたくさんあります...
私の SharedResourceDictionary は次のように実装されています (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;
}
}
}
これに対する解決策があるかどうか、誰かが考えを持っていますか? この共有辞書はメモリの改善のために残しておきたいのですが、リソースを簡単に変更したいのです...
手がかりをいただければ幸いです。ありがとうございました。
編集:
これ(SharedResourceDictionary)を行うと、静的リソースにも問題があります:
Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.
そして、それらを動的リソースに変更すると機能します。または、SharedResourceDictionary を単純な ResourceDictionary で変更すると、それも機能します。プロジェクトはコンパイルできますが、私が言ったように、変更せずにリソースを編集することはできません。