我应该使用哪个命名空间和程序集在共享项目中声明转换器

我应该使用哪个命名空间和程序集在Xamarin中的共享项目中声明转换器。

对于这个资源

     

如果我选择windowsPhone作为启动项目这个声明工作:

  xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXam.WinPhone" 

如果我选择Android作为启动项目这个声明工作:

  xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXam.Android" 

现在我应该使用什么来使它适用于MixedPlateform,我试过这个但没有成功:

  xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXam" 

先感谢您。

编辑有我的完整代码,以便更好地理解

            <Image Source="{Binding Category.ImageArticleTitle.Source}" HorizontalOptions="Start" WidthRequest="{Binding , Converter={StaticResource widthConverter}, ConverterParameter=150}"      

WidthConverter.cs

 namespace LeMagXam { public class WidthConverter : IValueConverter { #region IValueConverter implementation public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (double)parameter * App.RatioWidth; } public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException (); } #endregion } } 

请记住, 共享项目没有可编译的输出。

因此,将不会生成将要生成的汇编LeMagXam

而是将共享项目的内容编译引用它的项目中。

因此,如您所述,以下内容将适用于他们自己的平台特定项目: –

 xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXam.WinPhone" xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXam.Android" 

要解决这个问题,您可以使用: –

 xmlns:local="clr-namespace:LeMagXam" 

如果这不起作用,请考虑创建一个PCL项目并将转换器放入其中。

PCL项目具有可编译的输出。 因此,您可以在使用相同输出程序集的所有XAML页面中使用相同的声明 ,如下所示: –

 xmlns:local="clr-namespace:LeMagXam;assembly=LeMagXamPCL" 

请记住从特定平台的项目中引用PCL项目。

问问自己.WinPhone.Android是什么。 请记住,程序集是类必须引用的名称。 LeMagXam可能只包含公共元素,而不包含平台的细节。 想想System.Collection – 该命名空间中没有ListDictionary ,但System.Collection.Generics确实如此

宽度转换器有什么作用? 如果它只是一个执行一些基本数学的属性(比如将英尺转换为米),那么就不需要在特定于平台的命名空间中使用它。 如果它正在设置特定于平台的宽度,那么你不需要使用特定于平台的命名空间作为Xam.Forms已经允许你使用Device.OnPlatform (我认为它被称为)方法来做这种事情。

希望这可以帮助