如何在Silverlight 5中添加应用程序范围的资源字典?

时间:2012-02-23 19:07:58

标签: silverlight-5.0

我有一个Silverlight 5应用程序,它只是拒绝接受其Application.Resources标记中的任何内容:

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

Styles.xaml和ApplicationResources都不可用于我的控件。 例如:

<controls:ChildWindow
x:Class="My.Awesome.ErrorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
Title="{Binding Path=Errors.ErrorWindowTitle, Source={StaticResource ApplicationResources}}"
Style="{StaticResource ErrorWindowStyle}">

该控件将在运行时抛出其香蕉,但在Visual Studio编辑器中运行 fine (我可以看到来自我的ApplicationResources的文本)。 来自App.xaml的App:ApplicationResources如下:

namespace My.Awesome
{
    using System;
    using System.ComponentModel;
    using System.Globalization;
    using System.Windows.Browser;

    /// <summary>
    /// Wraps access to the strongly-typed resource classes so that you can bind control properties to resource strings in XAML.
    /// </summary>
    public sealed class ApplicationResources
    {
        private static readonly ApplicationStrings applicationStrings = new ApplicationStrings();
        private static readonly ErrorResources errorResources = new ErrorResources();

        /// <summary>
        /// Gets the <see cref="ApplicationStrings"/>.
        /// </summary>
        public ApplicationStrings Strings
        {
            get { return applicationStrings; }
        }

        /// <summary>
        /// Gets the <see cref="ErrorResources"/>.
        /// </summary>
        public ErrorResources Errors
        {
            get { return errorResources; }
        }
    }
}

我有相应的ApplicationStrings.resx和ErrorResources.resx,指定了正确的命名空间(My.Awesome)和PublicResXFileCodeGenerator处理器。

我把它缩小到Application.Resources字典不起作用,因为如果我在后面的代码中这样做:

this.Resources.Add("ApplicationResources", new ApplicationResources());

并删除对Styles的引用,然后运行应用程序。

作为参考,我从Silverlight业务应用程序模板中提取了ErrorWindow.xaml,Styles.xaml和两个.resx;它工作正常,我无法弄清楚为什么它在这个应用程序中不起作用。

2 个答案:

答案 0 :(得分:0)

没关系我最终将我的代码复制到Silverlight Business App,它运行良好。 我不知道为什么在这种情况下搞砸了;这不是它遭受的唯一错误。

最后,开始a-fresh解决了我所有的问题:)

答案 1 :(得分:0)

这发生在我身上,因为我的“App.xaml”构建操作不是“ApplicationDefinition”而是“Page”。将其切换为“ApplicationDefinition”为我修复了它。干杯!