在WPF中从动态源中读取特殊字符

时间:2017-09-14 10:10:24

标签: c# .net wpf unicode

我使用动态源来更新我的文本,它适用于普通字符但是对于像中文这样的特殊字符,只有直接将它们放在xaml文件中才有效。如果动态加载它将无法工作。

<Button Style="{StaticResource DefBtn}" x:Name="button_CreateElement" Content="{DynamicResource CMMsg_5171}"  Click="button_CreateElement_Click"/>
<Button Style="{StaticResource DefBtn}" x:Name="button_DeleteElement" Content="删除" Click="button_DeleteElement_Click"/>

这是如何呈现的。

enter image description here

正如您所看到的那样,动态加载的是错误的。

1 个答案:

答案 0 :(得分:2)

这对我有用:

<Window ... >

<!-- 
<Window.Resources>
    <clr:String x:Key="CMMsg_5171">删除</clr:String>
</Window.Resources> 
-->

<StackPanel>
    <TextBlock Text="{DynamicResource CMMsg_5171}" />
    <TextBlock Text="删除" />
</StackPanel>

<强>更新

  

“从外部文件加载字符串。这样也可以吗?”

是。我添加了一个资源字典ChineseTranslations.xaml(每种语言可以有一个),右键单击项目,添加,资源字典...... Build Action设置为'Content'和'Always Always'。

<ResourceDictionary ... xmlns:clr="clr-namespace:System;assembly=mscorlib" >

    <clr:String x:Key="CMMsg_5171">删除</clr:String>
    <!--more to come...-->
</ResourceDictionary>

我以下列方式将此资源字典添加到合并的字典中:

public MainWindow()
{
    InitializeComponent();
    LoadTranslations();
}

private void LoadTranslations()
{
    string file = GetTranslationsFileForSelectedLanguage();

    using (FileStream stream = File.OpenRead(file))
    {
        System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
        ResourceDictionary myResourceDictionary = (ResourceDictionary)reader.LoadAsync(stream);
        Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
    }
}

private string GetTranslationsFileForSelectedLanguage()
{
    // todo: add selection logic for when we have more languages in the future
    return "ChineseTranslations.xaml";
}