Silverlight: App.Current.Resources пусто - PullRequest
2 голосов
/ 30 сентября 2010

То, что я сделал, было основано на этой статье: http://msdn.microsoft.com/en-us/library/aa348547.aspx

Я пытаюсь получить строку из объединенного словаря, который загружен в app.xaml. Я пытаюсь сделать это из класса, который не является кодом файла. Я знаю, что файл ресурсов может загружаться в принципе, потому что элементы страницы стилизуются из разметки xaml из стилей, содержащихся в файле Styles.xaml.

Файл app.xaml

<Application
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
  x:Class="theApp.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/Styles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

файл styles.xaml (отредактирован для простоты)

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
     xmlns:clr="clr-namespace:System;assembly=mscorlib">

    <clr:String x:Key="applicationName">TheKraken</clr:String>
</ResourceDictionary>

Строка кода, которую я использую, чтобы попытаться получить доступ к ресурсу

string appName = (string)App.Current.Resources["applicationName"];

Есть идеи, что мне не хватает?

1 Ответ

1 голос
/ 30 сентября 2010

настоящая проблема с этим кодом не в самом коде.

Переменная, которой я назначаю ресурс, затем используется как часть предложения linq where.

Вы не поверите, так как у меня сегодня 3 человека чесали головы. ситуация была такая: У меня есть набор утверждений контракта, которые обеспечивают предварительное условие, что app.Current.Resources не является пустым - все они проходят

Ради демонстрации странности я назначаю ресурс двум отдельным строкам. один из которых используется в предложении linq where, другой - для демонстрации того, что извлечение строки из ресурса действительно работает. Строка, которая находится в предложении where, имеет значение null и не может иметь ничего, кроме null. Другая строка содержит данные, как и ожидалось. Обе строки назначены для использования одинакового кода. Еще более странно, что если я инициализирую строку, чтобы сказать «john», а затем присваиваю ему данные ресурса и затем использую это в linq, то присвоение «john» этой строке также приводит к тому, что строка является нулевой. Линк работал над XElement в то время.

string test = "John";
test =  (string)App.Current.Resources["applicationName"];
var results = from ........
              where x == test
              select something

это привело к тому, что тест не был установлен в john - IE linq после того, как опрашиваемый код оказывает влияние на назначение.

Исправление проблемы состояло в том, чтобы переместить linq в другой метод, а затем все стало нормально. Я не имею ни малейшего понятия, почему это произошло.

Я бы хотел знать, хотя. Я очень хочу воссоздать его в новом проекте и отправить в Microsoft TBH. Но я надеюсь, что есть очевидное и рациональное объяснение.

...