我正在尝试在Forms应用程序的共享项目中实现一个简单的部分类和方法,以与Android和iOs项目一起使用。
所有类都具有相同的名称空间( sharedTest ),并且具有关键字partial,但是Android和iOs文件中的partial类和方法似乎无法识别共享代码中实现的其他部分。
部分类 Shared 表示“具有单个部分的部分类”
Android和iOs文件中的方法 PlatformGetFilePath 引发错误“找不到用于实现部分方法声明的定义声明”
Android和iOs文件中的变量 _filepath 引发“当前方法中不存在”
要进行这项工作,我缺少什么吗?
共享项目中的局部类:
using System;
using Xamarin.Forms;
namespace sharedTest
{
public partial class Shared
{
public Shared()
{
}
partial void PlatformGetFilePath(string filename);
string _filepath;
public string GetFilePath(string filename)
{
PlatformGetFilePath(filename);
return _filepath;
}
}
}
Android:
using System;
using System.IO;
using Xamarin.Forms;
namespace sharedTest
{
public partial class Shared
{
partial void PlatformGetFilePath(string filename)
{
string libraryPath=Environment.GetFolderPath(Environment.SpecialFolder.Personal); ;
_filepath = Path.Combine(libraryPath, filename);
}
}
}
iOs:
using System;
using System.IO;
using Xamarin.Forms;
namespace sharedTest
{
public partial class Shared
{
partial void PlatformGetFilePath(string filename)
{
string documentsPath=Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string libraryPath = Path.Combine(documentsPath, "..", "Library");
_filepath = Path.Combine(libraryPath, filename);
}
}
}
答案 0 :(得分:0)
首先,它不起作用,因为您可以在iOS和Android中使用相同的名称空间。如果要在iOS和Android中执行不同的操作,则可以使用Custom Renderers
或DependencyService
。对于例子
表格
...
namespace sharedTest
{
public class MyClass
{
public interface IGetFilePath
{
String PlatformGetFilePath(string filename);
}
}
}
在iOS中
using System;
using System.IO;
using sharedTest;//your xamarin.forms name
using sharedTest.iOS;
using Xamarin.Forms;
[assembly: Dependency(typeof(MyiOSClass))]
namespace sharedTest.iOS
{
public class MyiOSClass:MyClass.IGetFilePath
{
public MyiOSClass()
{
}
public string PlatformGetFilePath(string filename)
{
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string libraryPath = Path.Combine(documentsPath, "..", "Library");
string filepath = Path.Combine(libraryPath, filename);
return filepath;
}
}
}
在Android中
using System;
using Xamarin.Forms;
using sharedTest;//your xamarin.forms name
using sharedTest.Droid;
using System.IO;
[assembly: Dependency(typeof(MyAndroidClass)) ]
namespace sharedTest.Droid
{
public class MyAndroidClass: MyClass.IGetFilePath
{
public MyAndroidClass()
{
}
public string PlatformGetFilePath(string filename)
{
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); ;
string filepath = Path.Combine(libraryPath, filename);
return filepath;
}
}
}
实施共享代码
var filePath = DependencyService.Get<MyClass.IGetFilePath>().PlatformGetFilePath("your file name");
有关更多信息,请参阅here
答案 1 :(得分:0)
这可以完成-但是部分类的共享部分需要在“共享项目”项目类型中定义。
我误以为这个“共享项目”可能是我的Xamarin Forms .net标准类库。不能-“共享项目”一词指的是称为“共享项目”的实际项目类型-不仅指共享的项目。
您需要添加“共享项目”类型的新项目,然后从Xamarin Forms类库和平台特定项目中引用该项目。并且还要确保名称空间与您完成的操作匹配。