Loading or Saving a XAML Resource Dictionary
Here is a rudimentary example of how to load a ResourceDictionary.xaml file and then how to change it and save the changes.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="HW">Hello, World</sys:String>
</ResourceDictionary>
using System;
using System.IO;
using System.Windows;
using System.Windows.Markup;
namespace ReadAndWriteToXaml
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static ResourceDictionary Dictionary;
public static String XamlFileName = "Dictionary1.xaml";
public App()
{
LoadStyleDictionaryFromFile(XamlFileName);
}
/// <summary>
/// This funtion loads a ResourceDictionary from a file at runtime
/// </summary>
public void LoadStyleDictionaryFromFile(string inFileName)
{
if (File.Exists(inFileName))
{
try
{
using (var fs = new FileStream(inFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Read in ResourceDictionary File
Dictionary = (ResourceDictionary)XamlReader.Load(fs);
// Clear any previous dictionaries loaded
Resources.MergedDictionaries.Clear();
// Add in newly loaded Resource Dictionary
Resources.MergedDictionaries.Add(Dictionary);
}
}
catch
{
// Do something here if file not found
}
}
}
private void Application_Exit_1(object sender, ExitEventArgs e)
{
try
{
Dictionary["HW"] += "Hello, back!";
StreamWriter writer = new StreamWriter(XamlFileName);
XamlWriter.Save(Dictionary, writer);
}
catch
{
// Do something here if file not found
}
}
}
}
Note: Unfortunately you cannot use two way mode when binding to DynamicResource objects, so editing the xaml file is made a bit more complex. But hopefully, this will help you get started.
