代码之家  ›  专栏  ›  技术社区  ›  John Nicholas

Silverlight:app.current.resources为空

  •  2
  • John Nicholas  · 技术社区  · 15 年前

    我所做的是基于本文: 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"];
    

    知道我错过了什么吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   John Nicholas    15 年前

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

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

    你不会相信的,因为我今天有三个人在抓他们的头。 情况是这样的: 我有一组合同声明,确保app.current.resources不是空的前提条件-这些都通过

    为了演示奇性,我将资源分配给两个单独的字符串。 其中一个用于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移到另一个方法中,然后一切都正常。我一点也不知道为什么会发生这种事。

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