2010-11-07 42 views
1

我正在WPF应用程序。我使用xml文件设置了多语言,并在前面的代码中使用静态资源绑定来设置相应的文本。我的问题是在代码隐藏中做同样的事情。XMLDataprovider标签绑定代码隐藏WPF c#

在这里你可以看到我是如何使用它在前面代码:

<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); 

,但由于某种原因,它doesent似乎工作。任何人都可以告诉我我错了哪里?

谢谢先进。

回答

3

您所展示的代码隐藏并不实际执行相同的操作。这是不同的方法有三种:

  1. 你改变XmlDataProvider
  2. 你提供不同的XPath到XmlDataProvider(MenuTextClimate/@头,而不是WpfApplication)的Source属性。
  3. 您还在绑定表达式中提供了不同的XPath。

问题可能仅仅是这些事情中的任何一个或所有都是错误的。 (XPath版本看起来特别可疑,因为它们看起来像是假设完全不同的XML文档结构,尽管由于您还提供了不同的XML文档,所以也许没问题,但从目前提供的信息无法判断)。我要做的第一件事就是让你的C#和你的Xaml完全一样 - 相同的URI和相同的XPath。如果这样做,应该更容易看出三件不同的事情中的哪一件导致问题。

或者,启用WPF调试输出。如果您使用的是.NET 3.5 sp1或更低版本,则默认情况下,这通常处于数据绑定消息的错误级别日志记录。 (数据绑定错误出现在输出窗口中。)从.NET 4.0起,Microsoft将其关闭,所以除非您提出要求,否则不会看到它。您可以在Visual Studio中的“选项”对话框中打开它 - 它位于调试 - >输出窗口下。确保数据绑定设置为显示错误。或了解更多的细节,曲柄它一路上涨,然后通过添加该启用完整日志记录:

PresentationTraceSources.SetTraceLevel(NewBinding, PresentationTraceLevel.High); 

这应该告诉你什么是数据绑定正在尝试与你结合做满血淋淋的细节,而这往往是一个很好的方法来找出为什么事情不起作用。

+0

感谢你这样写: – 2010-11-07 22:26:02

+0

Label NewLabel1 = new Label(); Binding NewBinding = new Binding(); NewBinding.Source = xmlData; NewBinding.XPath = Description [i] .ToString(); NewLabel1.SetBinding(Label.ContentProperty,NewBinding); – 2010-11-07 22:26:51