我能否使用XAML在Xamarin.Forms中设计用户界面?

5
我尝试使用Xamarin.Forms创建跨平台应用程序。据我所知,UI将从代码中创建,.axml文件将自动生成。
我能否修改.axml文件以编辑UI?我尝试过编辑,但出现的都是代码中编写的内容,例如:hello forms
更新:
public static Page GetMainPage ()
        {   
            return new simplerow ();
        }

从你的更新中很难判断哪些是正常的,哪些是有问题的。如果你想把你的项目发送过来,我可以帮你看一下?我的联系方式在我的个人资料上。 - Pete
@Pete 我明天会在这里发布完整的代码。感谢你的帮助 :) - techno
如果您在此链接中加载了我提供的XAML页面(https://github.com/xamarin/xamarin-forms-samples/tree/master/XAMLSamples)中的项目,它们有许多页面,您可以仅使用XAML复制其代码示例。是的-将页面放入共享项目(testforms)而不是平台特定项目(testforms.Android)。看一下,我认为您应该能够做到这一点。 - Pete
@Pete 谢谢。我会写XAML,但是在testforms下放置它的位置应该在哪里?我应该给它什么名称?如何从XAML创建内容页?XAML是否等同于Xamarin.Forms布局文件? - techno
尝试在项目根目录的testforms(共享项目)中创建一个新的XAML页面。代码后台将派生自ContentPage,而XAML部分可以从其中一个示例中复制。在App.cs中,您创建并返回使用的代码后台类名称的新实例。是的- XAML =使用Xamarin.Forms标记编写的布局文件。忘记任何android标记等,因为那是特定于平台的。如果您检查一些他们的XAML页面,我提供的链接将有所帮助。 - Pete
显示剩余4条评论
3个回答

7
在Xamarin.Forms中,您可以使用标记定义创建页面,这些定义可在所有平台上共享。
通常情况下,您将使用Xamarin.Forms编写所有内容页面,但是如果您愿意,可以将本机页面混合到应用程序中。
这些共享的公共页面使用Xamarin.Forms编写,可能驻留在PCL项目或Shared Project中,因此可以在面向特定平台的项目中重复使用,每个项目都针对特定的平台操作系统。
您可以使用代码或XAML编写这些公共页面。如果您愿意,甚至可以选择以一种方式编写某些页面,另一种方式编写其他页面。
Xamarin.Forms页面通过创建的页面组合在运行时进行处理。
在页面上指定的每个控件都有自己的平台特定渲染器,在幕后生成针对该OS的输出。
当编写Xamarin.Forms页面时,你将开始学习一种新的创建页面的方式,该方式抽象出了在每个不同平台操作系统上创建移动应用程序的复杂性。因此,没有可编辑的.axml文件生成等,因为你将使用Xamarin.Forms标记和控件来编写页面,甚至使用自己或其他自定义控件来生成自己的应用程序页面。下面的link展示了如何编写XAML页面的一些示例。下面的link展示了如何从代码后台编写页面的一些示例。

谢谢回答,这让事情更加清晰。抱歉回复晚了。 - techno

2

除了上一个答案提到的.xaml而不是.axml之外,您还需要记住更改app.cs中的启动代码以使用新的.xaml表单。将“new ContentPage {…};”替换为“new MyForm();”(其中“MyForm”是您的闪亮新XAML表单的名称)。

编辑:从dropbox链接下载项目。下面是评论...

我看到了几个问题。我认为您可能需要通过Xamarin提供的演练和示例应用程序来掌握XF应用程序背后的概念。

首先,您正在尝试将Activity用作应用程序页面。在Xamarin Forms应用程序中,它必须是某种视图,而不是平台特定的可视化,例如Activity。

其次,请从Android项目的Resources/layout文件夹中删除“test.xml”文件;虽然XAML文件确实是XML,但它们具有1).xaml的文件扩展名和2)属于共享项目。

以下是使您的项目正常工作所需执行的操作:(我假设您在使用VS,在Xamarin Studio下,它略有不同。)

  1. 右键单击“testforms”共享项目
  2. 从上下文菜单中选择添加,然后选择“新项目”
  3. 在出现的对话框中,选择“Forms XAML Page”,并在名称区域中输入名称(例如“MyForm”) (如果您使用的是XS,请选择“新文件”和“表单ContentPage”)
  4. 这将向您的项目添加两个文件:包含布局的XAML文件(例如MyForm.xaml)和代码后备文件(例如MyForm.xaml.cs)。
  5. 打开XAML文件,并修改Label元素,使Text属性为

    Text =“Hello,World!”

  6. 修改App.cs中的GetMainPage的主体如下:

    return new MyForm();

  7. 运行应用程序

希望这有所帮助!


谢谢您指出这一点。最终我可以使用我熟悉的XAML来设计UI :) - techno
我尝试了这个,并更新了app.cs文件中的代码以从simplerow.xml创建UI。但是simplerow没有被识别。请查看更新。 - techno
它只是编译失败了吗?你的XAML长什么样子?你是否包含了你的窗体代码后台类所在的命名空间? - Andy Hopper
编译失败了。我不在办公室,明天大约同一时间会发布代码。 - techno
请从 Dropbox 下载项目 https://www.dropbox.com/s/myhuun5fp3rrd70/testforms.zip?dl=0 - techno

1
你理解错了。表单是通过代码或XAML创建的。在平台级别上不会生成任何axml或持久性内容,所有操作都在运行时完成(XAML在编译时被编译)。因此,如果想要更改某些内容,请修改代码或XAML。如果需要更多功能,则可以考虑对现有渲染器进行子类化或创建自己的渲染器。

谢谢。如果我需要创建一个Xamarin.Forms应用程序,我可以使用XAML创建UI,例如:通过编辑Main.axml文件,就像我们在Android应用程序中所做的一样。但是我像这样进行了修改,但更改没有反映出来,而是只有基本的Hello Forms消息。请让我知道您是否需要代码。 - techno
1
不,没有axml。XAML是跨平台的Forms通用标记语言。在这里阅读更多信息 - Miha Markic
"(XAML 在编译时有一定程度的编译)" 的说法有些不准确 :) - Stephane Delcroix
嗯,我不知道你在 MSBuild 级别和运行时做了什么确切的转换,因此我写了“有点像”。也许你只是嵌入了 XAML 内容,可能是二进制优化或其他什么?无论如何,如果你想详细说明,我都可以倾听 :) - Miha Markic
@MihaMarkic:唯一的MSBuild转换是生成包含InitializeComponent()和字段定义的部分类。在您的obj/Debug文件夹中查找带有.xaml.g.cs扩展名的文件。 - Stephane Delcroix
1
我看了,我以为你做了更多的事情。无论如何,我的确是正确的,因为自定义工具说“MSBuild:Compile”;-) - Miha Markic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接