Когда я ввожу главную страницу в конструктор класса приложения, я получаю, что StaticResource не найден для ключа. Но если я не добавляю главную страницу в конструктор приложения, она работает.
У меня есть файл темы глобального ресурса, который я вызываю в App.xaml.cs, где я объявляю статический ресурс:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "Resources/Styles/Colors.xaml" />
<ResourceDictionary Source = "Themes/LightTheme.xaml" /> <!--Theme file-->
<ResourceDictionary Source = "Themes/DarkTheme.xaml" /> <!--Theme file-->
<ResourceDictionary Source = "Resources/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Это мой файл App.cs:
public App(MainPage mainPage)
{
InitializeComponent();
MainPage = mainPage;
}
Следующий код находится в файле MainPage.xaml:
<StackLayout BackgroundColor = "{StaticResource SecondaryBackroundColor}" Grid.Row = "0">
<Image
Source = "ic_logo.png"
SemanticProperties.Description = "Cute dot net bot waving hi to you!"
HeightRequest = "200"
HorizontalOptions = "Center" VerticalOptions = "CenterAndExpand"/>
</StackLayout>
Я добавил MainPage в класс mauiprogram.cs
builder.Services.AddTransient<MainPage>();
Не опечатка, я перепроверил
Я создал новый проект для проверки вашего кода и столкнулся с той же ошибкой. Затем я добавил две точки останова. Один относится к методу построения MainPage, а другой — к методу построения App.cs.
Я обнаружил, что метод построения главной страницы выполняется раньше, чем app.cs, когда я использовал builder.Services.AddTransient<MainPage>();
. Так появилась ошибка.
Наконец, вы можете следить за этой проблемой о Невозможно использовать ресурсы App.xaml после внедрения зависимостей .NET MAUI на github. Или просто используйте DynamicResource вместо StaticResource, например:
<StackLayout BackgroundColor = "{DynamicResource SecondaryBackroundColor}"
Я пробовал. Использование DynamicResource работает.
Не уверен, что это решит вашу проблему, но кажется, что в вашем xaml есть опечатка: вам не хватает «g» в «Фон». Если у вас нет этой опечатки в файле theme.xaml, это объясняет вашу ошибку.