【问题标题】:Why can't I move my resource dictionary in Silverlight?为什么我不能在 Silverlight 中移动我的资源字典?
【发布时间】:2011-03-01 21:56:16
【问题描述】:

由于某种原因,以下代码给了我一个异常。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PPCa.Common.Infrastructure;component/Skins/Default.xaml"/>
            <ResourceDictionary>
                <app:ResourceWrapper x:Key="ResourceWrapper" />
                <app:NotOperatorValueConverter x:Key="NotOperatorValueConverter" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>                
</Application.Resources>

这是一个例外:

System.Windows.Markup.XamlParseException occurred
  Message=Failed to assign to property 'System.Windows.ResourceDictionary.Source'. [Line: 11 Position: 44]
  LineNumber=11
  LinePosition=44
  StackTrace:
       at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
  InnerException: 

第 11 行是这样的:

<ResourceDictionary Source="/PPCa.Common.Infrastructure;component/Skins/Default.xaml"/>

我是否以某种方式错误地合并了我的字典?

【问题讨论】:

    标签: silverlight resources resourcedictionary


    【解决方案1】:

    为什么没有人回答我的问题?我是被列入黑名单还是什么的。人们过去常常帮助我更多。无论如何,我发现了我的问题。一个例外是红鲱鱼。该问题与我的应用程序资源定义无关。我在资源字典深处遇到的问题。我正在合并引用字典中不再存在的字典。这很难弄清楚。

    【讨论】:

    • 如果没有人回答关于 SO 的问题,那是因为没有人知道答案。这里对声誉的渴望非常强烈:)
    • 所以我没有被列入黑名单?我开始担心了。没有人回答我的任何问题。无论如何,经过很长时间,我自己想出了这个。
    • SO 有一个有趣的动态。这都是声誉驱动的,所以我们在这里获得的内容类型确实受此影响。简单的问题最容易引起人们的兴趣,因为它们很容易代表,引起很多兴趣的困难问题也得到了很好的回应。但是,不会引起太大兴趣的硬/晦涩问题往往会被忽视。我想说你的问题比其他问题更多。
    • 此错误属于许多非常模糊的 XAML 解析异常。感谢您节省了这么多时间来查找这个。我直接去了合并字典并检查了死资源。固定。
    • 所以基本上,一个难题(即一个值得社区回答的问题)因为付款太低而得不到答案。也许提问者应该能够在发布时为答案设置代表奖励(除了等待 N 天的赏金)
    【解决方案2】:

    这些字典是否在同一个 XAP 中?如果是这样,相对路径应该可以工作。我已经使用所有相对路径在字典中合并,没有任何问题。这是我的一个例子:

    <Application.Resources>
        <ResourceDictionary x:Name="appDictionary">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary x:Name="ControlStylesDictionary" 
                      Source="Resources/Styles/ControlStyles.xaml" />
                <ResourceDictionary x:Name="MenuStylesDictionary" 
                      Source="Resources/Styles/MenuStyles.xaml" />
        </ResourceDictionary>
    </Application.Resources>
    

    这是我在您的 XAML 中看到的唯一区别。

    【讨论】:

    • 不,我的字典在外部 XAP 中。
    【解决方案3】:

    如果字典在另一个 XAP 中,您需要从那里download the XAP and load the dictionary

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,同样的通用错误消息并找到了解决方案。恕我直言,这似乎是一个错误。

      我正在为 .Net、SL5、WP7.1 构建应用程序。为此,我将代码放在 .Net 应用程序中,并为其他项目添加源链接。效果很好。

      我的主要应用项目称为 MyApp.Net、MyApp.SL 和 MyApp.WP。但是,我将这些项目的默认命名空间和项目输出设置为简单的 MyApp。再次,效果很好。

      我将资源放在 MyApp.Resources.Net、MyApp.Resources.SL 和 MyApp.Resources.WP 项目中。使用 VS 源链接存在一些问题,因为 Expression Blend 希望直接访问物理文件,并且当(例如)MyApp.Resources.WP 项目包含指向 MyStyles.xaml 文件的源链接时会感到困惑MyApp.Resources.Net 项目。因此,我所有的资源项目实际上都包含物理文件。这也很好,我只需要手动同步文件。到目前为止没有问题。

      但是,对于我的资源项目,我将命名空间和输出文件更改为 MyApp.Resources。这也使我的应用程序代码保持简单,无论它是为哪个平台构建的,命名空间都是相同的。

      是的,我知道这有点复杂,但它允许我为 3 个平台(如果包括 Blendability 和 UnitTesting 的话,技术上是 5 个)构建所有具有相同代码库的平台。

      如果我这样创建 ResourceDictionary 则继续

      <ResourceDictionary Source="/MyApp.Resources;component/Styles/TextStyles.xaml"/>
      

      我得到 Failed to assign to property 'System.Windows.ResourceDictionary.Source' etc...

      简而言之,我发现如果程序集名称包含'.'出现此错误。例如,如果我将项目名称更改为简单的“资源”,它就可以正常工作。或者,如果我将项目的默认构建名称保留为“MyApp.Resources.WP”,它也可以正常工作。

      这与更改我的资源 dll 输出文件名无关,我整天都在更改它们并且效果很好,但是如果它们包含“。”我收到上述错误。例如,我可以将输出名称更改为“MyAppResourceThatWorks”(将项目名称保留为 MyApp.Resources.WP 并将其加载到 App.xaml 中

      <ResourceDictionary Source="/MyAppResourceThatWorks;component/Styles/TextStyles.xaml"/>
      

      效果很好。将输出名称更改为“MyAppResourcesThatDoNot.Work”并加载它

      <ResourceDictionary Source="/MyAppResourceThatDoNot.Work;component/Styles/TextStyles.xaml"/>
      

      失败。

      是的,我尝试更改程序集属性等。这是 Pack Uri 的负载问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多