2

我所做的是基于这篇文章:http: //msdn.microsoft.com/en-us/library/aa348547.aspx

我正在尝试从 app.xaml 中加载的合并字典中获取字符串。我正在尝试从不是文件隐藏代码的类中执行此操作。我知道资源文件原则上可以加载,因为页面元素的样式来自 Styles.xaml 文件中包含的样式的 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"];

知道我缺少什么吗?

4

1 回答 1

1

这段代码的真正问题不在于代码本身。

然后,我将资源分配给的变量作为 linq where 子句的一部分使用。

你不会相信这一点,因为我今天有 3 个人摸不着头脑。情况是这样的:我有一组合同声明,确保 app.Current.Resources 不为空的前提条件 - 这些都通过

为了证明奇怪,我将资源分配给 2 个单独的字符串。其中一个用于 linq where 子句,另一个用于证明从资源中提取字符串确实有效。where 子句中的字符串为空,不能设置为空以外的任何值。另一个字符串包含预期的数据。两个字符串都分配给使用精确相同的代码。更奇怪的是,如果我将一个字符串初始化为“john”,然后将资源数据分配给它,然后在 linq 中使用它,那么将“john”分配给字符串也会导致字符串为空。linq 当时正在研究 XElement。

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

这导致测试没有设置为 john - IE 在被质疑的代码对分配产生影响之后的 linq。

该问题的解决方法是将 linq 移到另一个 rmethod 中,然后一切正常。我不知道为什么会发生这种情况。

不过我很想知道。我很想在一个新项目中重新创建它并将其发送给 microsoft tbh。但我希望有一个明显和合理的解释。

于 2010-09-30T15:13:41.433 回答