我下载了当前Xamarin Forms主分支的副本,编译了它,然后我将这些编译的程序集添加为测试项目的引用:
测试项目是使用Visual Studio Xamarin Forms项目模板创建的,我修改的唯一内容是Core.csproj和Android.csproj中的引用指向已编译的程序集。
我使用了Xamarin.Forms.Platform.Android项目的bin \ debug \文件夹中的前3个,以及Xamarin.Forms.Xaml bin \ debug文件夹中的最后一个。
我运行测试项目,运行正常,我可以看到默认生成的代码“欢迎使用Xamarin Forms!”中的标签。
接下来,我刚刚修改了MainPage:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new ContentPage());
}
}
当我运行该应用时,它会给我一个错误
System.ArgumentException:element的类型不是Xamarin.Forms.View
参数名称:element
抛出这一行:
void IVisualElementRenderer.SetElement(VisualElement element)
{
if (!(element is TElement))
throw new ArgumentException("element is not of type " + typeof(TElement), nameof(element));
SetElement((TElement)element);
}
这很奇怪。
元素的类型是Xamarin.Forms.NavigationPage
,堆栈跟踪是
有人可以帮助我使用已编译的程序集运行测试项目吗?
更新#1:
调用堆栈中的第二个条目显示它无法获取NavigationPageRenderer
元素的已注册渲染器(NavigationPage
),而是创建默认渲染器(DefaultRenderer
),它无法处理元素的类型(NavigationPage
)所以它抛出了我看到的异常。
因此,对于NavigationPage
,它似乎在NavigationPageRenderer
中找不到其渲染器(Registrar
)。
public static IVisualElementRenderer CreateRenderer(VisualElement element)
{
UpdateGlobalContext(element);
IVisualElementRenderer renderer = Registrar.Registered.GetHandler<IVisualElementRenderer>(element.GetType()) ?? new DefaultRenderer();
renderer.SetElement(element);
return renderer;
}
我的感觉是在构建Xamarin Forms时我不知道构建步骤。
答案 0 :(得分:0)
当你在一些不是从Forms.Page(即ContentPage等)派生的东西上调用InitializeComponent时崩溃了。
应用程序本身不是一个页面,如果你有一个页面,我们称之为'MyCustomPage',它后面有一些Xaml看起来像这样:
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // MySQL datetime format
echo $now->getTimestamp();
然后在App构造函数中调用
public partial class MyCustomPage : ContentPage
{
public MyCustomPage()
{
InitializeComponent ();
// Some other setup...
}
}
由于您是从应用程序的根目录创建空白内容页面,因此无需调用InitializeComponent。
希望这有帮助。
答案 1 :(得分:0)
您还需要参考
Xamarin.Forms.Platform.Android (Forwarders)
来自Android项目。