我正在使用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
我将不胜感激任何帮助。提前谢谢。
托马斯