Как добавить словарь ресурсов для всего приложения в Silverlight 5?

У меня есть приложение 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>

Neither the Styles.xaml nor the ApplicationResources are available to my controls. For example:

<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 (я вижу текст, поступающий из моих ApplicationResources). App:ApplicationResources из App.xaml выглядит следующим образом:

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());

и удалите ссылку на стили, тогда приложение запустится.

Для справки я извлек файлы ErrorWindow.xaml, Styles.xaml и оба файла .resx из шаблона бизнес-приложения Silverlight; там все работало нормально, я просто не могу понять, почему это не работает в этом приложении.


person Julien Lebot    schedule 23.02.2012    source источник


Ответы (2)


Неважно, в итоге я скопировал свой код в бизнес-приложение Silverlight, и это сработало. Я не знаю, почему в этом случае все испортилось; и это была не единственная ошибка, которую он страдал.

В конце концов, запуск с нуля решил все мои проблемы :)

person Julien Lebot    schedule 24.02.2012

Это случилось со мной, потому что каким-то образом мое действие сборки «App.xaml» было не «ApplicationDefinition», а просто «Страница». Переключение на «ApplicationDefinition» исправило это для меня. Ваше здоровье!

person Jason    schedule 28.11.2013