Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只在代码中创建UI而不使用XAML的正确方法?_Xaml_Uno Platform_Uno - Fatal编程技术网

只在代码中创建UI而不使用XAML的正确方法?

只在代码中创建UI而不使用XAML的正确方法?,xaml,uno-platform,uno,Xaml,Uno Platform,Uno,我正在尝试使用VS代码在linux(MX linux)中开发Uno应用程序。我希望在不使用XAML的情况下实现它。使用模板创建存储库,我继续删除MainPage.xaml文件,并替换InitializeComponent()与我的UI代码 虽然这在Skia.Gtk平台中工作得相当好,但是Wasm构建失败,因为它无法找到MainPage.xaml文件 这是建筑时大圆木的开始部分 Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET

我正在尝试使用VS代码在linux(MX linux)中开发Uno应用程序。我希望在不使用XAML的情况下实现它。使用模板创建存储库,我继续删除
MainPage.xaml
文件,并替换
InitializeComponent()与我的UI代码

虽然这在
Skia.Gtk
平台中工作得相当好,但是
Wasm
构建失败,因为它无法找到
MainPage.xaml
文件

这是建筑时大圆木的开始部分

Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  All projects are up-to-date for restore.
MSBUILD : error : Generation failed: System.AggregateException: One or more errors occurred. (Generation failed for Uno.UI.SourceGenerators.XamlGenerator.XamlCodeGenerator. System.AggregateException: One or more errors occurred. (Failed to parse file /home/Coding/UnoPrac/UnoPrac.Shared/MainPage.xaml) 

所以我的问题是,我的方法正确吗?当然,我可以使xaml文件只包含
元素,并且它适用于某些平台,但是如果xaml文件不存在,是否可以强制Uno忽略它呢

编辑:我也在windows上测试了它。似乎
Skia.Gtk
平台的独特之处在于它可以在没有任何xaml文件的情况下运行,前提是
*.xaml.cs
文件中的每个
InitializeComponent()
方法都有合适的代码

我删除了
App.xaml
文件,并在
App.xaml.cs
文件中添加了这个片段来代替
InitializeComponent()
方法

this.Resources=new Microsoft.UI.Xaml.Controls.XamlControlsResources();
类似地,我删除了
MainPage.xaml
文件,并在
App.xaml.cs
文件中添加了该文件来代替
InitializeComponent()
方法

公共密封部分类主页面:第页
{
Button nextPage=新建按钮(){Content=“Next”};
TextBlock=newtextblock(){Text=“欢迎来到Uno”};
公共主页()
{
//this.InitializeComponent();
Content=newgrid(){Children={block,nextPage}};
}
}
虽然这个设置在
Skia.Gtk
平台上可以完美地工作,但它不适用于我测试的其他任何东西:UWP、Android和Wasm

在使用空的
元素保留xaml文件时,Android平台应用程序确实成功工作,而UWP遇到运行时错误,Wasm应用程序运行,但页面为空(即没有显示任何组件)


如果用于Gtk平台的代码能够忽略xaml文件,那么Uno中的其他平台是否有任何等效代码?或者这种方法根本不可能?

在WASM项目的
bin
obj
文件夹中可能有一些
MainPage.xaml
的遗留痕迹。在VS代码中打开解决方案文件夹,并在任何地方搜索MainPage.xaml。确保删除引用文件的区域。之后,构建应该会再次工作。

我认为需要进行更改。我最初认为问题出在各个平台上,但现在我明白了与其他平台不同的是,
Skia.Gtk
端口运行的唯一原因是因为构建错误在其中悄无声息地失败

要解决此问题,需要在
*.Shared.projitems
中删除对任何xaml文件的所有依赖关系。根据我的测试,
App.xaml
本身可以根据问题进行删除和替换,并且在Android、Linux(Skia.Gtk)和WebAssembly上运行良好。但是,UWP对
App.xaml
文件有一些内部依赖性,因此最终我无法删除它。但是,在删除所有其他
xaml
文件的引用后,我测试的所有端口(UWP、Android、Skia.Gtk和WebAssembly)都正常运行

为了完整起见,我将在下面包含我编辑的
*.Shared.projitems


美元(所有项目)$(MSBuildThisFileFullPath)
真的
6279c845-92f8-4333-ab99-3d213163593c
UnoPrac
设计师
MSBuild:编译

哦,我在Wasm应用程序中得到一个“空白”页面的原因很简单,因为背景是白色的,上面有所有的组件。因此,我只需要将页面背景设置为黑色。

值得注意的是,虽然您可以这样做只是为了看看它是否有效,但使用它制作一个实际功能的应用程序将成为一个问题,因为您将失去对数据模板、样式和样式的支持,编译绑定和其他一些东西,它们要么使开发更快,要么实际上提高了性能。@JohnnyWestlake这可能会变得有点乏味,但我觉得这没什么大不了的,当然也不是不可能的。我已经在Xamarin中开发了一段时间,您可以键入的所有xaml都可以转换为代码隐藏(在构建时隐式地完成)。我觉得与其等待一个捆绑了XAML支持的免费工具出现在Linux开发中,不如采用Flatter所采用的方法,用代码创建UI。我理解你的观点,XAML提供了一个非常舒适的抽象,我准备走出这个舒适区。