XAML не может достичь локализованных ресурсов - PullRequest
0 голосов
/ 03 августа 2020

У меня проблемы с локализованными ресурсами для подпроектов.

Основной проект (называемый Z) использует подпроект (называемый ProjectsModule), у которого есть собственные ресурсы. Подпроект имеет два файла ресурсов:

Strings.resx
Strings.pl-PL.resx

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

Я получаю следующее исключение:

System.Windows.Markup.XamlParseException: 'Operacja podawania wartości elementu 
„System.Windows.Markup.StaticExtension” wywołała wyjątek., numer wiersza 24, pozycja 52.'
ArgumentException: Obiektu StaticExtension 
„ProjectsModule.Resources.Strings.Projects_Config_Projects” nie można rozpoznać jako wyliczenia, pola 
statycznego ani właściwości statycznej.

В переводе говорится:

"ProjectsModule.Resources.Strings.Projects_Config_Projects" cannot be recognized as enum, static field
or static property.

Это происходит, когда загружается XAML окна. Итак, я проверил и изменил конструктор окна:

public ConfigurationWindow(ConfigurationWindowViewModel viewModel)
{
    // *** DEBUG ***
    System.Diagnostics.Debug.WriteLine(ProjectsModule.Resources.Strings.Projects_Config_Projects);
    // *** END DEBUG ***

    InitializeComponent();

    this.viewModel = viewModel;
    viewModel.Access = this;
    this.DataContext = viewModel;
}

И, как ни странно, я получаю следующий результат:

Katalogi projektów
'Z.exe' (CLR v4.0.30319: Z.exe): Loaded     'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xaml.resources\v4.0_4.0.0.0_pl_b77a5c561934e089\System.Xaml.resources.dll'. Module was built without symbols.
Exception thrown: 'System.ArgumentException' in System.Xaml.dll
Exception thrown: 'System.Xaml.XamlObjectWriterException' in System.Xaml.dll
Exception thrown: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll
Operacja podawania wartości elementu „System.Windows.Markup.StaticExtension” wywołała wyjątek., numer wiersza 24, pozycja 52.

"Katalogi projektów" - это именно тот ресурс, который я ищу - значит явно достижимо. Однако по какой-то причине он недоступен для анализатора XAML (вы можете увидеть исключение, упомянутое ранее, сразу после правильно разрешенного ресурса).

Что я делаю не так? Почему ресурс, который явно доступен (и, более того, прочитан из правильно переведенной вспомогательной сборки), недоступен синтаксическому анализатору XAML?

Изменить: В ответ на комментарии

Использование ресурсов:

<Window ...
    xmlns:properties="clr-namespace:ProjectsModule.Resources"
</Window>

...

<TextBlock DockPanel.Dock="Top" Margin="3" Style="{StaticResource Header}" 
    Text="{x:Static properties:Strings.Projects_Config_Projects}"></TextBlock>

Культура основана на культуре операционной системы. Значит, устанавливается автоматически.

1 Ответ

1 голос
/ 03 августа 2020

Значение StaticExtension не может быть преобразовано в перечисление, поле stati c или свойство stati c.

Ваши файлы .resx должны иметь модификатор доступа Public , иначе вы получите XamlParseException во время выполнения, поскольку синтаксический анализатор XAML не может получить доступ к ресурсам. По умолчанию это Internal, поэтому доступ к ресурсам из другой сборки невозможен. Чтобы изменить модификатор доступа, go перейдите к редактору ресурсов и измените его в раскрывающемся меню заголовка.

enter image description here

Alternatively, change the CustomTool in the resource file properties to PublicResXFileCodeGenerator.

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...