Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在多个控件中使用同一ResourceDictionary对象_Wpf_Resourcedictionary - Fatal编程技术网

Wpf 在多个控件中使用同一ResourceDictionary对象

Wpf 在多个控件中使用同一ResourceDictionary对象,wpf,resourcedictionary,Wpf,Resourcedictionary,我有一个场景,在运行时解析资源字典的XAML。例如: var parsedResourceDictionary = XamlReader.Parse(xaml) as ResourceDictionary; 这一切都发生在自定义资源字典(作为基类从ResourceDictionary派生)中。解析后,我调用 MergedDictionaries.Add(parsedResourceDictionary); 因为解析XAML需要相当长的时间,所以我想缓存解析器的输出,并只调用MergedDic

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

var parsedResourceDictionary = XamlReader.Parse(xaml) as ResourceDictionary;
这一切都发生在自定义资源字典(作为基类从ResourceDictionary派生)中。解析后,我调用

MergedDictionaries.Add(parsedResourceDictionary);
因为解析XAML需要相当长的时间,所以我想缓存解析器的输出,并只调用MergedDictionary字段上的add方法。 现在,我的问题是是否可以保留对这个parsedResourceDictionary的引用并在以后添加它


谢谢

是的。读一次,把它放在一个变量中的某个地方,以后使用它,而不是再读一次。你试过了吗?

我刚刚制作了一个小的测试应用程序,其中我从一个嵌入式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事件中,我刚刚创建了一个主窗口的新实例,然后