Конструктор ресурса Silverlight всегда возвращается к внутреннему

Когда я изменяю свой файл ресурсов (.resx), добавляю текст или изменяю, конструктор моего ресурса всегда переходит к внутреннему, а после этого, когда я запускаю свой Silverlight, у меня есть ошибка в привязывающем XAML.

Есть ли способ избежать этого сценария? Мне нужно пойти в конструктор моего ресурса и опубликовать конструктор для решения проблемы

Я использую свой ресурс, как это, в моем файле xaml

 <UserControl.Resources>
        <resources:LibraryItemDetailsView x:Key="LibraryItemDetailsViewResources"></resources:LibraryItemDetailsView>
    </UserControl.Resources>


<TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>

Ответ 2

Вы можете создать открытый класс, который предоставляет ресурсы через свойство:

public class StringsWrapper
{
    private static LibraryItemDetailsView _view = null;

    public LibraryItemDetailsView View
    {
        get
        {
            if (_view == null)
            {
                _view = new LibraryItemDetailsView();
            }
            return _view;
        }
    }
}

Затем в вашем XAML вы можете получить доступ к своему ресурсу:

<UserControl.Resources>
    <StringsWrapper x:Key="LibraryItemDetailsViewResources"></StringsWrapper>
</UserControl.Resources>


<TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=View.FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>

Таким образом, конструктор resx может быть внутренним!

Ответ 3

Хорошо, что я сделал, это добавить утилиту командной строки для предварительного построения события каждого проекта Silverlight, который заменяет каждый internal string на public:)

Вы можете редактировать события предварительной сборки и пост-сборки путем: Щелкните правой кнопкой мыши по проекту → PropertiesBuild Events.

Я использовал утилиту под названием RXFIND, она бесплатна и может заменить строку в выбранных файлах с помощью регулярного выражения RegEx.

В этой командной строке я использую:

"$(SolutionDir)ThirdParty\rxfind\rxfind.exe" "$(ProjectDir)Resources\*.Designer.cs" "/P:internal " "/R:public " /Q /B:2

Обратите внимание, что все мои ресурсы находятся в каталоге ресурсов в каждом проекте, а утилита командной строки находится в каталоге \ThirdParty\rxfind

Ответ 4

У меня тоже такая же ошибка. Чтобы решить проблему, я только что создал public class, который наследуется от класса, представляющего файл ресурсов, зная, что он также должен быть открытым классом, это мой exep:

public class TrackResourceWrapper : TrackResource
{
}

с: TrackResourceWrapper наследует класс TrackResource - это класс, который находится в файле ресурса кода (public class)

Ответ 5

Просто:

  • Добавить новый класс, который наследуется от класса ресурсов
  • В файле App.xaml измените класс ресурсов, который вы создали.

Готово!

Ответ 6

Причиной этого является то, что вы не должны создавать экземпляр класса самостоятельно. Вместо этого вы всегда должны использовать ConsoleApplication1.Resource1.ResourceManager, который сам создает для вас класс.

Здесь ConsoleApplication1 - имя вашей сборки и Resource1 имя вашего файла ресурсов.

Ответ 7

Я создал макрос, чтобы сделать это для меня для каждого редактируемого файла. Я все еще должен помнить, чтобы запустить его, но это намного быстрее. Пожалуйста, смотрите мой пост.