为了优化我的应用程序,我创建了一个 SharedResourceDictionary。有了这个,我在运行时节省了大约 250 mb 的内存,所以效果很好。
我的问题是在设计时,在 Blend 4 中,我无法再访问我的资源。要修改模板(witch 在我的资源文件中),我通常右键单击我的控件,然后选择 Edit Template --> Edit Current,如下图所示:
我需要以这种方式修改我的模板,它比进入我的资源文件并找到好的模板要快 100 倍......我有很多资源......
我的 SharedResourceDictionary 是这样实现的(在网上找到):
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.
当我将它们更改为动态资源时,它可以工作,或者如果我通过简单的 ResourceDictionary 更改 SharedResourceDictionary 它也可以工作。该项目可以编译,但正如我所说,我无法在没有修改的情况下编辑资源。