Конструктор ресурса Silverlight всегда возвращается во внутренний - PullRequest
10 голосов
/ 19 октября 2010

Когда я изменяю свой файл ресурса (.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>

Ответы [ 7 ]

4 голосов
/ 11 февраля 2011

Другой способ сделать это без изменения кода, как показано ниже.Работал хорошо для меня.

http://guysmithferrier.com/post/2010/09/PublicResourceCodeGenerator-now-works-with-Visual-Studio-2010.aspx

3 голосов
/ 22 декабря 2010

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

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может быть внутренним!

1 голос
/ 18 февраля 2016

Просто:

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

Готово!

1 голос
/ 26 августа 2013

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

public class TrackResourceWrapper : TrackResource
{
}

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

1 голос
/ 27 февраля 2012

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

Вы можете редактировать предварительноСобытия сборки и пост-сборки: щелкнув правой кнопкой мыши по проекту -> Properties -> Build Events.

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

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

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

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

0 голосов
/ 29 февраля 2012

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

0 голосов
/ 19 октября 2010

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

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

...