Почему не найден мой xaml-файл ResourceDictionary? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть проект Xamarin со следующей структурой:

MyApp
- Конвертеры
- Модели
- Стили
-Colors.xaml
- ViewModels
- Просмотры
-ListPage.xaml
-ListPage.xaml.cs

Я пытаюсь использовать Colors.xaml в качестве внешнего словаря ресурсов для моей цветовой схемы всего приложения. , Я добавил источник в ресурсы ListPage.xaml, например, так:

    <ContentPage.Resources>
        <ResourceDictionary Source="Styles/Colors.xaml"/>
        <!--<ResourceDictionary>
            <converter:StatusToColorConverter x:Key="StatusToColorConverter" />
        </ResourceDictionary>-->
    </ContentPage.Resources>

Когда я пытаюсь построить проект, я получаю несколько ошибок сборки, которые, похоже, начинаются с ошибки
Resource "Styles/Colors.xaml not found.

Я пытался удалить тег класса из файла Colors.xaml, а также файл с выделенным кодом (очевидно, его нет в моей структуре) согласно этой документации и это все еще не решило проблему. Я также добавил тот же <ResourceDictionary Source="Styles/Colors.xaml"/> в мой файл приложения безрезультатно. Чего мне не хватает, чтобы направить ListPage.xaml в файл Colors.xaml?

Весь соответствующий код ниже:
Colors.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
    <!--Color Scheme-->
    <Color x:Key="ColorBackground">#333333</Color>
    <Color x:Key="ColorObjectBackground">#FFFFFF</Color>
    <Color x:Key="ColorTierOneText">#3c3c3c</Color>
    <Color x:Key="ColorTierTwoText">#999999</Color>
</ResourceDictionary>   

ListPage.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:converter="clr-namespace:MyApp"
             mc:Ignorable="d"
             x:Class="MyApp.Views.ListPage" 
             Title="this is the title">

    <ContentPage.BackgroundColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="GTK" Value="#3c3c3c" />
        </OnPlatform>
    </ContentPage.BackgroundColor>

    <ContentPage.Resources>
        <ResourceDictionary Source="Styles/Colors.xaml"/>
        <!--<ResourceDictionary>
            <converter:StatusToColorConverter x:Key="StatusToColorConverter" />
        </ResourceDictionary>-->
    </ContentPage.Resources>

    <StackLayout>
        <Label x:Name="NotFoundMessage"
                   IsVisible="False"
                   Text="No results found."
                   HorizontalTextAlignment="Center"
                   TextColor="ColorTierTwoText"
                   Padding="5"/>
    </StackLayout>  

    </ContentPage.Content>
</ContentPage>

App.xaml

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="MyApp.App">


    <Application.Resources>
        <ResourceDictionary Source="Styles\Colors.xaml"/>
    </Application.Resources>
</Application>

1 Ответ

1 голос
/ 31 марта 2020

Указанный вами путь кажется неправильным. Styles\Colors Тип пути работает только для Android.

Чтобы добавить внешний файл, необходимо добавить ссылку на xmlns.

, и вы пропали x: атрибут класса. Просто добавьте его как ContentPage, а затем измените базовый класс. Он должен скомпилироваться для его работы.

Добавить x:Class="MyApp" к атрибуту Colors.xaml ResourceDictionary

<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    x:Class="MyApp">

Код позади

public partial class Colors : ResourceDictionary
{
    public Colors()
    {
        InitializeComponent();
    }
}

В App.xaml

xmlns:local="clr-namespace:WhereColorsNamespace."

Также необходимо добавить использование MergedDictionary

 <ResourceDictionary.MergedDictionaries>
      <local:Colors x:Key="colors"/>
</ResourceDictionary.MergedDictionaries>

Ссылка: https://xamarinhelp.com/merged-dictionaries-xamarin-forms/

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