【问题标题】:Can I design the UI in Xamarin.Forms by using XAML我可以使用 XAML 在 Xamarin.Forms 中设计 UI
【发布时间】:2014-12-02 21:43:10
【问题描述】:

我正在尝试使用 Xamarin.Forms 创建一个跨平台应用程序。据我所知,UI 将由代码创建,.axml 文件将自动生成。

我可以修改 .axml 文件来编辑 UI 吗?我尝试编辑,但出现的只是代码中写的内容。即:hello forms

更新

public static Page GetMainPage ()
        {   
            return new simplerow ();
        }

【问题讨论】:

  • 很难从您的更新中看出什么是/什么不起作用。如果您想发送您的项目,我会看看?我的联系方式在我的个人资料中。
  • @Pete 我明天会在这里发布完整的代码。谢谢你的帮助 :)
  • @Pete 这是 xamarin.forms 项目的链接dropbox.com/s/myhuun5fp3rrd70/testforms.zip?dl=0
  • 编译时出现错误,因为 test.xml 为空。尽管在测试表单共享项目的 App.cs 中看起来,您希望从特定于 Android 平台的项目中返回一个页面。这不是你想要做的。您将编写的所有布局都将位于 Xamarin.Forms 中,并将驻留在测试表单共享项目中,因为这些是将用于不同平台特定项目(即 iOS 和 Windows Phone)的通用页面。
  • 感谢您检查它。test.xml 不是空的,它可能没有保存。好的,所以我需要在 Xamarin.forms 中编写布局并将其放在 testforms 而不是 testforms.android .你能在我发给你的项目中写一个简单的 xamarin.forms 布局吗?现在我对此感到困惑。Xamarin.forms 布局可以用 XAML 编写吗

标签: android mono xamarin xamarin.forms


【解决方案1】:

Xamarin.Forms 中,您可以从跨所有平台共享的标记定义创建页面。

通常,您将使用 Xamarin.Forms 编写所有内容页面,但是如果您愿意,您可以将本机页面混合并匹配到应用程序中。

这些以 Xamarin.Forms 编写的共享公共页面可能驻留在 PCL 项目或 共享项目 中,因此它们可以然后在特定平台项目中重复使用,每个项目都针对特定平台操作系统

您可以使用代码XAML 编写这些通用页面。您甚至可以选择以一种方式编写一些页面,如果您愿意,可以选择另一种方式。

Xamarin.Forms 页面在运行时通过解释已创建的页面组合进行处理。

在页面上指定的每个控件都有自己的平台特定渲染器,在后台,将生成针对该操作系统的输出。

在编写 Xamarin.Forms 页面时,最重要的是,您将开始学习一种创建页面的新方法,该方法从在每个不同平台上创建移动应用程序的复杂性中抽象出来操作系统

因此 没有 可编辑的 .axml 生成等,因为您将使用 Xamarin.Forms 标记和控件编写页面,并且甚至是您自己的或其他自定义控件来生成您自己的应用程序页面。

以下link 展示了一些如何编写XAML 页面的示例。

以下link 展示了一些如何从代码隐藏页面编写的示例。

【讨论】:

  • 感谢您的回答,这让事情变得清晰起来。抱歉回复晚了。
【解决方案2】:

除了前面的回答 re:.xaml 而不是 .axml,您需要记住更改 app.cs 中的启动代码以使用新的 .xaml 表单。替换“新的 ContentPage {...};”用“新的 MyForm();” (其中“MyForm”是您闪亮的新 XAML 表单的名称)。

编辑:从保管箱链接下载项目。下方评论...

我在这里看到了几个问题。我认为您可能需要通过 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,请选择“新建文件”和“表单内容页面”)
  4. 这会将两个文件添加到您的项目中:一个包含您的布局的 XAML 文件(例如:MyForm.xaml)和一个代码隐藏文件(例如:MyForm.xaml.cs)。
  5. 打开 XAML 文件,修改 Label 元素,使 Text 属性为

    Text = “你好,世界!”

  6. 将 App.cs 中 GetMainPage 的正文修改为以下内容:

    return new MyForm();

  7. 运行应用程序

希望这会有所帮助!

【讨论】:

  • 感谢您指出这一点。最后我可以使用我知道的 XAML 来设计 UI :)
  • 我尝试了这个并更新了app.cs文件中的代码以从simplerow.xml创建一个ui。但是simplerow无法识别。请查看更新。
  • 只是编译失败?您的 XAML 是什么样的?您是否包含了表单的代​​码隐藏类所在的命名空间?
  • 编译失败。我不在办公室,明天大约同一时间发布代码。
【解决方案3】:

你错了。表单是通过代码或 XAML 创建的。在平台级别不会生成任何 axml 或任何持久性内容,一切都在运行时完成(XAML 是在编译时编译的)。

因此,如果您想更改某些内容,请修改代码或 XAML。或者,如果您需要更高要求的东西,则可以考虑将现有渲染器子类化或创建自己的渲染器。

【讨论】:

  • Thanks.So 如果我需要创建一个 Xamarin.Forms 应用程序,我可以使用 XAML 创建 UI 即:通过编辑 Main.axml 文件,就像我们在 Android 应用程序中所做的那样。但我修改了这样并且没有反映更改,所有的都是基本的 hello 表单消息。如果您需要代码,请告诉我
  • 不,没有 axml。 XAML 与 Forms 平台无关。 Read more here
  • “(XAML 是在编译时编译的)”有点错误:)
  • 好吧,我不知道您在 MSBuild 级别和运行时正在做什么确切的转换,因此我写了“排序”。也许您只是嵌入 XAML 内容,可能是二进制优化的或什么?无论如何,如果您想了解详细信息,我会全力以赴:)
  • 我明白了,我以为你在做更多的事情。无论如何,我仍然是正确的,因为自定义工具说“MSBuild:Compile”;-)
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 2016-04-15
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2017-02-27
相关资源
最近更新 更多