我正在研究WPF应用程序。我用xml文件设置了多语言,我在前面的代码中使用静态资源绑定来设置相应的文本。我遇到的问题是在代码隐藏中做同样的事情。
在这里,您可以看到我如何在前面的代码中使用它:
<XmlDataProvider x:Key="Lang" Source="/lng/english.xml" XPath="WpfApplication"/>
<Label HorizontalAlignment="Center" Margin="0,10,0,5" Foreground="White" FontWeight="Bold" Content="{Binding Source={StaticResource Lang}, XPath=MenuTextClimate/@Header}"></Label>
我试图在代码隐藏中做同样的事情:
String selLangFullPath = WpfLibrary.LanguageOptions.getSelLangFullPath();
XmlDataProvider xmlData = (XmlDataProvider)(this.FindResource("Lang"));
xmlData.Source = new Uri(selLangFullPath, UriKind.Relative);
xmlData.XPath = "MenuTextClimate/@Header";
Binding NewBinding = new Binding();
NewBinding.Source = xmlData;
NewBinding.Mode = BindingMode.OneWay;
NewBinding.XPath = "MenuTextClimate";
lblTitle.SetBinding(Label.ContentProperty, NewBinding);
但由于某种原因,它似乎有效。谁能告诉我哪里出错了?
先谢谢。
答案 0 :(得分:3)
你所展示的代码隐藏实际上并没有做同样的事情。它有三种不同之处:
问题可能只是任何或所有这些事情都是错误的。 (XPath看起来特别可疑,因为它们看起来像是假设一个完全不同的XML文档结构。虽然你也提供了不同的XML文档,但也许那很好。从目前为止提供的信息中无法分辨出来。)所以我要做的第一件事就是尝试让你的C#与你的Xam完全相同 - 相同的URI和相同的XPath。如果可行的话,应该更容易看出导致问题的三种不同之处。
或者,启用WPF调试输出。如果您使用的是.NET 3.5 sp1或更早版本,则默认情况下这通常用于数据绑定消息的错误级别日志记录。 (数据绑定错误出现在“输出”窗口中。)从.NET 4.0开始,Microsoft将其关闭,因此除非您要求,否则您将看不到它。您可以使用Visual Studio中的“选项”对话框将其打开 - 它位于“调试”下 - &gt;输出窗口。确保将数据绑定设置为显示错误。或者更详细的信息,将其一直向上,然后通过添加以下内容启用完整日志记录:
PresentationTraceSources.SetTraceLevel(NewBinding, PresentationTraceLevel.High);
这应该向您展示数据绑定试图对您的绑定做什么的完整血腥细节,这通常是找出事情不起作用的好方法。