如何在Xaml中显示MarkupExtension

时间:2016-04-26 09:56:42

标签: xamarin.forms markup-extensions

我正在使用Xamarin.Forms进行项目。

我有一个用于在PCL中定义的文本翻译的MarkupExtension 公众(因此应该在PCL之外可见)和 还有一个用于PCL初始化的静态类,并且在App构造函数

中调用了它的Init方法

分机代码:

 [ContentProperty("Text")]
    public class TranslateExtension : IMarkupExtension
    {
        readonly CultureInfo ci;
        const string ResourceId = "GymHeroViews.Resources.AppResources";        

        public TranslateExtension()
        {
            ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
        }

        public string Text { get; set; }

        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (Text == null)
                return "";

            ResourceManager resmgr = new ResourceManager(ResourceId
                                , typeof(TranslateExtension).GetTypeInfo().Assembly);

            var translation = resmgr.GetString(Text, ci);

            if (translation == null)
            {
#if DEBUG
                throw new ArgumentException(
                    String.Format("Key '{0}' was not found in resources '{1}' for culture '{2}'.", Text, ResourceId, ci.Name),
                    "Text");
#else
                translation = Text;
#endif
            }
            return translation;
        }
    }

扩展包含在GymHero.Common命名空间中。输出dll的名称是GymHero.Common.dll。

在Xaml文件中,我定义了一个命名空间:

xmlns:t="clr-namespace:GymHero.Common;assembly:GymHero.Common"

然后我定义了一个Button:

<Button x:Name="Excersise1GridButton" Text="{t:Translate Excersise1GridButton}" Grid.Row="0" Grid.Column="1" />

对我而言,一切看起来都应该如此,但我得到了例外:

  

Xamarin.Forms.Xaml.XamlParseException:不要输入TranslateExtension   在xmlns clr-namespace中找到:GymHero.Common; assembly:GymHero.Common

我将不胜感激任何帮助。提前谢谢。

托马斯

0 个答案:

没有答案