1
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="MultiLanguage.App" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary x:Name="LanguageDictionary" Source="/LanguageResources;component/EnglishResources.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> 

EnglishResources.xaml

<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="add">ADD</sys:String> <sys:String x:Key="key">Key</sys:String> <sys:String x:Key="stringValue">String Value</sys:String> 

MainWindow.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="MultiLanguage.MainWindow" x:Name="Window" Title="MainWindow" Width="640" Height="480"> <Grid x:Name="LayoutRoot" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Button x:Name="btnAdd" Content="{DynamicResource add}" Height="48" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" Margin="10" Click="btnAdd_Click" /> <TextBlock Text="{DynamicResource key}" Height="40" Width="100" Grid.Column="0" Grid.Row="0" Margin="10"/> <TextBlock Text="{DynamicResource stringValue}" Height="40" Width="100" Grid.Column="0" Grid.Row="1" Margin="10"/> <TextBox x:Name="txtKey" Height="40" Width="200" Grid.Column="1" Grid.Row="0" Margin="10"/> <TextBox x:Name="txtStringValue" Height="40" Width="200" Grid.Column="1" Grid.Row="1" Margin="10"/> </Grid> 

with above code, i get the following window

enter image description here

private void btnAdd_Click(object sender, RoutedEventArgs e) { AddKeyValue(txtKey.Text, txtStringValue.Text); } private void AddKeyValue(object key, object value) { // load the resource dictionary var rd = new System.Windows.ResourceDictionary(); rd.Source = new System.Uri("pack://application:,,,/LanguageResources;component/EnglishResources.xaml", System.UriKind.RelativeOrAbsolute); // add the new key with value rd.Add(key, value); // now you can save the changed resource dictionary var settings = new System.Xml.XmlWriterSettings(); settings.Indent = true; var writer = System.Xml.XmlWriter.Create(@"EnglishResources.xaml", settings); System.Windows.Markup.XamlWriter.Save(rd, writer); } 

If i click Add button the value should be inserted in the resource dictionary which(EnglishResources.xaml) is already i have. But it is not insert. Please help me out.

I need Like

<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="add">ADD</sys:String> <sys:String x:Key="key">Key</sys:String> <sys:String x:Key="stringValue">String Value</sys:String> <!-- the value should be inserted here. But not Insert--> </ResourceDictionary> 

After Added

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib"> <s:String x:Key="add">ADD</sys:String> <s:String x:Key="key">Key</sys:String> <s:String x:Key="stringValue">String Value</sys:String> <!-- the value should be inserted here. But not Insert--> </ResourceDictionary> 

After i added the value into resource dictionary i get result like above. the sys is changed into to s and name space are merged as a line.

1 Answer 1

3

you can do it with this simple solution

private void AddKeyValue(object key, object value) { // load the resource dictionary var rd = new System.Windows.ResourceDictionary(); rd.Source = new System.Uri("pack://application:,,,/YOURAssemblyName;component/EnglishResources.xaml", System.UriKind.RelativeOrAbsolute); // add the new key with value //rd.Add(key, value); if (rd.Contains(key)) { rd[key] = value; } else { rd.Add(key, value); } // now you can save the changed resource dictionary var settings = new System.Xml.XmlWriterSettings(); settings.Indent = true; var writer = System.Xml.XmlWriter.Create(@"EnglishResources.xaml", settings); System.Windows.Markup.XamlWriter.Save(rd, writer); } 

Usage

AddKeyValue("NewKey1", "StringValue"); AddKeyValue("NewKey2", 1000); 

Hope that helps.

Sign up to request clarification or add additional context in comments.

10 Comments

if i use this, This is not add the key and value in my resource dictionary.
@ASHOKA Have you saved the file?
@ASHOKA you must replace with the correct path to your resource dict file. i don't know where your file locate. it's only a sample code, not a one to one copy&paste code to your code...
Thanks lot punker76 It is worked out. I can add the value into resource dictionary now. At the same, i have to replace/modify the value by Key. I found some method(Add,Remove,..) in ResourceDictionary class but not Replace or Modify method. is it possible to replace the value in resource dictionary ?.
@ASHOKA you can use Contains function to check if the key already exists. look at my changed code example.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.