环境:程序多语言,使用的是xaml资源字典
在app.xaml中根据配置加载语言xaml
比如新建一个Chinese.xaml
在app.xaml中
Resources.MergedDictionaries.Add((ResourceDictionary)Application.LoadComponent(new Uri("Language.Skin.Source;component/Language/Chinese.xaml", UriKind.Relative)));
需求:生成解决方案的时候,。把Chinese.xaml输出到debug中, Resources.MergedDictionaries.Add指向debug中的Chinese.xaml文件
这样子我在debug文件内修改xaml语言文件,就可以直接应用到程序中,要不然需要在代码中修改xaml语言文件,再重新生成
试过多种方法,网上查过相关资料,发现 Resources.MergedDictionaries.Add没有办法加载程序集外的文件
想知道有没有其他方法实现这一需求,求思路,代码更好
图片搬运地址:https://blog.51cto.com/u_15127642/2876371
好机智。。妈的学会了
【以下回答由 GPT 生成】
我可以理解你的需求,你想在WPF中加载本地硬盘上的XAML文件作为资源字典。对于这个问题,我可以给你提供一种解决方案。
首先,你需要在生成解决方案时将Chinese.xaml文件输出到debug目录中。在项目中,选择Chinese.xaml文件,右击属性,将"复制到输出目录"属性设置为"始终复制"。这样在每次生成项目时,Chinese.xaml文件都会被复制到debug目录下。
然后,你需要修改代码以从debug目录加载Chinese.xaml文件作为资源字典。你可以使用以下代码实现:
string debugPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string xamlFilePath = System.IO.Path.Combine(debugPath, "Chinese.xaml");
if (System.IO.File.Exists(xamlFilePath))
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(xamlFilePath))
{
System.Xml.XmlReader xr = System.Xml.XmlReader.Create(sr);
ResourceDictionary rd = (ResourceDictionary)System.Windows.Markup.XamlReader.Load(xr);
Resources.MergedDictionaries.Add(rd);
}
}
else
{
// 如果文件不存在,你可以在这里处理错误或者采取其他措施
}
这段代码首先获取当前执行程序的目录路径,然后将它与Chinese.xaml文件的名字结合起来,形成一个完整的文件路径。接下来,检查该文件是否存在。如果存在,通过使用XamlReader
类加载该文件,并将其作为资源字典添加到MergedDictionaries集合中。
注意,上述代码是假设你的Chinese.xaml文件位于与执行程序相同的目录中。如果你的Chinese.xaml文件存在于不同的目录,你需要根据实际情况修改代码中的路径。
希望以上解决方案对你有所帮助,如果你对其中的任何部分有疑问,请随时提问。