Xamarin Forms Объединенный словарь, бросающий ArgumentException - PullRequest
0 голосов
/ 01 мая 2018

Вот мой первый вопрос на stackoverflow.com.

Я часами пытаюсь создать Объединенный словарь в формах Xamarin (хотя впервые). Я следую следующие учебные пособия / документация: https://jmillerdev.net/creating-a-xamarin-forms-theme-assembly/ и https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/resource-dictionaries.

Мои шаги:

  1. Создать новое приложение «Мобильное приложение (Xamarin.Forms)» под названием «TestApp2».
  2. Создайте новую страницу XAML ContentPage (MyDic.xaml), переименуйте <ContentPage> в <ResourceDictionary> и поместите в простой стиль.
  3. Изменен MyDic.xaml.cs, чтобы файл наследовал от ResourceDictionary вместо ContentPage.
  4. Добавлен код в App.xaml для объединения словаря ресурсов.

Я продолжаю получать ArgumentException "Объект типа 'NInterpret.InterpretedObject' не может быть преобразован в тип 'Xamarin.Forms.ResourceDictionary'." когда он запускает "InitializeComponent ();" в App.xaml.cs.

Я запускаю приложение в Xamarin Live Player и использую сообщество Visual Studio 2017 (все обновляется). NuGet показывает, что существует пять обновлений Xamarin, но чтобы применить их, мне придется изменить целевую версию с Android 7.1 на 8.1. Я не встречал никакой информации о том, что MergedDictionaries будет работать только в Android 8.1.

Код приложения. 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"
             x:Class="TestApp2.App"
             xmlns:style="clr-namespace:TestApp2">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <style:MyDic />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

MyDic.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"
             x:Class="TestApp2.MyDic">
    <Style TargetType="Button">
        <Setter Property="BackgroundColor" Value="Yellow" />
    </Style>
</ResourceDictionary>

MyDic.xaml.cs код:

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace TestApp2
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MyDic : ResourceDictionary
    {
    }
}

Я попытался использовать вместо этого MergedWith со следующим кодом

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="TestApp2.App"
             xmlns:style="clr-namespace:TestApp2">
    <Application.Resources>
        <ResourceDictionary x:Key="Dictionary1" MergedWith="style:MyDic"/>
    </Application.Resources>
</Application>

, но также получить ArgumentException: «MergedWith должен наследоваться от ResourceDictionary».

После некоторого тестирования я понял, что когда я добавил новый ContentPage в Visual Studio, страница не могла быть открыта. Я предположил, что это означает, что ResourceDictionary, следовательно, может быть как-то поврежден. Я нашел сообщение об ошибке (https://developercommunity.visualstudio.com/content/problem/160939/bug-adding-xaml-content-page-to-shared-project-xam.html), относящееся к другой проблеме, но попытался, и это решило проблему, так что страницы содержимого могли открываться, но не проблема ResourceDictionary.

Я попытался переместить ResourceDictionary в файл MainPage.xaml, но вместо этого произошло то же исключение в MainPage.xaml.cs.

Любая помощь будет принята с благодарностью!


Предложения, которые я пробовал:

  • По предложению Диего я удалил папку obj и bin, закрыл и заново открыл VS, очистил и восстановил (и прыгнул 3 раза со скрещенными пальцами), но безуспешно. Та же ошибка. Спасибо за предложение Диего. :)
  • Полная переустановка ПК ничего не сделала - все то же исключение.

Есть еще предложения?

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