我应该使用哪个命名空间和程序集在共享项目中声明转换器
我应该使用哪个命名空间和程序集在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
– 该命名空间中没有List
或Dictionary
,但System.Collection.Generics
确实如此
宽度转换器有什么作用? 如果它只是一个执行一些基本数学的属性(比如将英尺转换为米),那么就不需要在特定于平台的命名空间中使用它。 如果它正在设置特定于平台的宽度,那么你不需要使用特定于平台的命名空间作为Xam.Forms已经允许你使用Device.OnPlatform
(我认为它被称为)方法来做这种事情。
希望这可以帮助