2014-10-30 13 views
5

Sto tentando di utilizzare un'estensione di markup personalizzata con moduli Xamarin per poter implementare la localizzazione. Sto provando ad andare a lungo le linee degli esempi del modulo Xamarin.Xamarin.Forms.Xaml.XamlParseException: MarkupExtension non trovato

ecco un pezzi di codice XAML che utilizza l'estensione:

<?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> 

ecco il codice per l'estensione di markup Traduzione:

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"; 
     } 
    } 
} 

ho commentato parte del codice nel caso in cui questa era la causa del problema.

Ogni volta che si tenta di eseguire questo viene visualizzato l'errore: Xamarin.Forms.Xaml.XamlParseException: MarkupExtension non trovato per locale: Translate. Sono molto confuso perché non trova l'estensione markup come tutti gli esempi che guardo sembrano essere fatti allo stesso modo. Qualcuno sa perché sarebbe? Sto avendo un sacco di problemi in generale, trovando buoni esempi per le forme Xamarin.

risposta

4

Il nome dell'assembly è errato. Stavo usando un progetto condiviso per i moduli Xamarin e avevo il nome del progetto condiviso come nome dell'assembly. Pertanto, se si dispone di un progetto condiviso, il nome dell'assembly deve essere l'assembly che utilizza il progetto condiviso.

+0

Ciao Michelle, grazie per aver condiviso! Come sei riuscito a gestire i diversi namespace (iOS, Droid, WinPhone) da XAML? Voglio dire che se il tuo assembly è '' 'assembly = MyApp''' dovrai cambiare in' '' assembly = MyApp.WinPhone''' quando crei per WP, '' 'MyApp.Droid''' quando costruisci per Android , usw ... – Wizche

+0

Ricorda che sto facendo un progetto condiviso, quindi ho fatto in modo che fosse lo stesso nome assembly per ogni progetto. Il nome dell'assembly è definito nelle proprietà di costruzione in ciascuno dei progetti per iOS, Android e Windows. Lo spazio dei nomi si riferiva allo spazio dei nomi in cui ho scritto l'estensione. Ha più senso? – Michelle

+0

Sì, ho finito con la stessa soluzione. Xamarin rocks;) – Wizche