开发者

Using same ResourceDictionary object in multiple controls

I have a scenario where I parse the XAML of the resource dictionary at runtime. Like following:

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

This all happens inside a custom resource dictionary (derived from ResourceDictionary as base class). After parsing, I call

MergedDictionaries.Add(parsedResourceDictionary);

Since parsing the XAML takes quite some time I want to cache the parsers output and just call the add method on the MergedDictionary field. 开发者_运维问答Now, my question is if it is possible to keep a reference to this parsedResourceDictionary and add it later.

thanks


Yes. Read it once, put it in a variable somewhere and use that in future instead of reading it again. Did you try it?


I just made a small testing app where I created a ResourceDictionary from an embedded XAML:

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();
    }
}

In the Button_Click event I just created a new instance of the MainWindow which then

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜