Xamarin.Forms.Xaml.XamlParseException: расширение разметки не найдено

Я пытаюсь использовать пользовательское расширение разметки с формами Xamarin, чтобы в конечном итоге реализовать локализацию. Я пытаюсь использовать длинные строки примеров формы Xamarin.

Вот фрагменты кода XAML, в котором используется расширение:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:CRI.MAP.Mobile.Views;assembly=CRI.MAP.Mobile"
    x:Class="CRI.MAP.Mobile.Views.CustomerSearchPage">

    <StackLayout>
        <Button 
            Text="{local:Translate Clear}"  
            Command="{Binding ClearCommand}" />
    </StackLayout>

Вот код для разметки расширения перевода:

using System;
using Xamarin.Forms.Xaml;
using Xamarin.Forms;
using System.Diagnostics;

namespace CRI.MAP.Mobile.Views
{
    // You exclude the 'Extension' suffix when using in Xaml markup
    [ContentProperty ("Text")]
    public class TranslateExtension : IMarkupExtension
    {
        public string Text { get; set; }

        public object ProvideValue (IServiceProvider serviceProvider)
        {
            //if (Text == null)
            //  return null;
            //Debug.WriteLine ("Provide: " + Text);
            // Do your translation lookup here, using whatever method you require
            //var translated = L10n.Localize (Text); 

            //return translated;
            return "hello";
        }
    }
}

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

Всякий раз, когда я пытаюсь запустить это, я получаю сообщение об ошибке: Xamarin.Forms.Xaml.XamlParseException: MarkupExtension не найден для локального: Translate. Я очень смущен тем, почему он не находит расширение разметки, поскольку все примеры, которые я смотрю, кажутся одинаковыми. Кто-нибудь знает, почему это будет? У меня много проблем с поиском хороших примеров для форм Xamarin.


person Michelle    schedule 30.10.2014    source источник


Ответы (1)


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

person Michelle    schedule 30.10.2014
comment
Привет, Мишель, спасибо, что поделилась! Как вам удалось обрабатывать разные пространства имен (iOS, Droid, WinPhone) из XAML? Я имею в виду, что если ваша сборка assembly=MyApp, вам нужно будет изменить ее на assembly=MyApp.WinPhone при сборке для WP, MyApp.Droid при сборке для Android, usw... - person Wizche; 22.12.2014
comment
Помните, что я делаю общий проект, поэтому я сделал его одним и тем же именем сборки для каждого проекта. Имя сборки определяется в свойствах сборки в каждом из проектов для iOS, Android и Windows. Пространство имен относится к пространству имен, в котором я написал расширение. Имеет ли это больше смысла? - person Michelle; 02.01.2015
comment
Да, я пришел к тому же решению. Ксамарин рулит;) - person Wizche; 02.01.2015
comment
У меня было похожее сообщение об ошибке, когда я написал «binding» со строчной b вместо заглавной, например (неправильно)., ‹Label Text={binding Date, StringFormat='{0:d}'} /› - person Damien Sawyer; 05.02.2015
comment
Дэмиен Сойер, ты спас меня, в моем случае это был Bindig. Это должен быть другой ответ, а не комментарий :) - person Bart; 23.10.2015