在多个控件中使用相同的ResourceDictionary对象

时间:2011-06-14 12:10:11

标签: wpf resourcedictionary

我有一个场景,我在运行时解析资源字典的XAML。如下:

var parsedResourceDictionary = XamlReader.Parse(xaml) as ResourceDictionary;

这一切都发生在自定义资源字典中(从ResourceDictionary派生为基类)。解析后,我打电话给

MergedDictionaries.Add(parsedResourceDictionary);

由于解析XAML需要相当长的时间,我想缓存解析器输出,只需在MergedDictionary字段上调用add方法即可。 现在,我的问题是,是否可以保留对此parsedResourceDictionary的引用并稍后添加。

感谢

2 个答案:

答案 0 :(得分:0)

是。阅读一次,将其放在某处的变量中并在将来使用它而不是再次读取它。你试过吗?

答案 1 :(得分:0)

我刚刚创建了一个小型测试应用程序,我从嵌入式XAML创建了一个ResourceDictionary:

public partial class MainWindow : Window
{
    public static ResourceDictionary CachedResourceDictionary;

    public MainWindow()
    {
        if (CachedResourceDictionary == null)
        {
            CachedResourceDictionary = new ResourceDictionary
            {
                Source =
                    new Uri("/ResourceDictionaryCache;component/Dictionary1.xaml",
                            UriKind.RelativeOrAbsolute)
            };
        }
        Resources.MergedDictionaries.Add(CachedResourceDictionary);

        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var toOpen = new MainWindow();
        toOpen.Show();
    }
}

在Button_Click事件中,我刚刚创建了一个MainWindow的新实例,然后