XMLDataprovider код привязки метки за WPF c # - PullRequest
1 голос
/ 07 ноября 2010

Я работаю над приложением 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>

Я пытаюсь сделать то же самое в codebehind как это:

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

но по какой-то причине это, кажется, работает. Кто-нибудь может сказать мне, где я ошибся?

Спасибо заранее.

1 Ответ

3 голосов
/ 08 ноября 2010

Код, который вы показали, на самом деле не делает то же самое.Это отличается тремя способами:

  1. Вы изменяете свойство Source XmlDataProvider
  2. Вы предоставляете другой XPath для XmlDataProvider (MenuTextClimate / @ Header вместо WpfApplication).
  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);

Это должно показать вам полную информацию о том, что привязка данных пытается сделать с вашей привязкой, и эточасто довольно хороший способ выяснить, почему что-то не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...