2010-11-07 67 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