如何自定义 Xamarin.Forms 应用程序?

Posted

技术标签:

【中文标题】如何自定义 Xamarin.Forms 应用程序?【英文标题】:How to customize Xamarin.Forms app? 【发布时间】:2015-06-18 22:02:10 【问题描述】:

如何自定义 xamarin.forms 组件的外观? 例如,我希望每个按钮都具有相同的图像。或者让所有系统共享具有相同背景图像的相同登录屏幕。 我知道我可以通过为每个平台项目添加一个特定的屏幕来做到这一点。但我希望能够自定义组件本身。示例:无论运行哪个平台,所有按钮都将具有相同的背景图像。

我读过这些:

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/styles/

http://code.tutsplus.com/tutorials/getting-started-with-xamarinforms-customizing-user-interface--cms-22144

最有希望的似乎是最后一个。自定义渲染器是实现此目的的唯一方法吗?我不能只在共享项目中添加一个图像,它就会自动适用于所有平台吗?

谢谢。

【问题讨论】:

要对某种类型的所有元素应用共同的外观,您可以使用样式。 @Jason 谢谢 Jason,喜欢 Xamarin 的链接示例吗? (第二个链接) 是的。他们还提供有关在表单中处理图像的指南 - developer.xamarin.com/guides/cross-platform/xamarin-forms/… @Jason 好的,如果您可以将其发布为回复,我将能够接受。谢谢! 【参考方案1】:

不是很清楚,究竟你想达到什么......但我试着回答你。

如果您使用共享项目(基于模板“Blank App (Xamarin.Forms shared)”,则可以使用相同您的所有平台中的页面/页面定义。 您可以添加 - 例如共享文件夹中的登录表单,然后从代码中调用它(例如,从共享文件夹中的另一个页面)。 如果您想创建您自己的控件,您可以创建“用户控件”并在您想要的任何地方使用它(我向每个用户推荐)。 为此,您可以创建一个 自己的 类(例如,使用条目和标签),实现事件,然后在您想要使用它的地方实例化它。例如

var OeFirma = new EntryErfassung(cDefaultText: "Firma", iMaximalLaenge: 45);

其中 OeFirma 是页面上对象实例的名称(用于访问它),EntryErfassung 是我自己的类(包含描述标签、Entry 和错误标签等),cDefaultText 是一个参数,超过并将默认文本设置为条目,而 iMaximalaenge 是另一个被超越的参数,my class 然后小心,该条目接受不超过 45 个字符)。

我有例如创建了一个带有描述标签、删除按钮、条目和错误标签广告的类。在所有数据输入表单上使用它。 如果您想更改特定平台的特定控件的外观,您可以创建一个“自定义渲染”(我已经这样做了,例如将字体大小更改为特定于 ios 的编辑,作为font-sinze 不能在 XF-Entry 控件中设置)。

希望这能回答您的问题...

【讨论】:

感谢您的回答。你和特里斯坦的答案是我想要的。【参考方案2】:

为此,您只需在 App 类中指定一个样式(您需要将应用程序类更改为由 2 个部分组成:App.xaml 和 App.xaml.cs,然后创建一个 ResourceDictionary保存您的定制。

<Style TargetType="Button">
    <Setter Property="Image" Value="MyImage.png"/>
</Style>

希望对您有所帮助。

干杯, 特里斯坦

【讨论】:

以上是关于如何自定义 Xamarin.Forms 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 中 Picker 的自定义渲染器

如何在 XAML [Xamarin.Forms] 中使用 String 以外的类型设置自定义属性值

Xamarin Forms WinRT 条目自定义渲染器

如何创建一个自定义控件,用户可以在 Xamarin.Forms 中添加任何类型的视图?

MAUI 移植 Xamarin.Forms 自定义渲染器

如何在 Xamarin Forms 中使用自定义字体(任何外部字体)作为嵌入资源?