如何在 Xamarin 中使用具有 android/IOS 特定视图的控制模板

Posted

技术标签:

【中文标题】如何在 Xamarin 中使用具有 android/IOS 特定视图的控制模板【英文标题】:How to use a Control Template with android/IOS specific views in Xamarin 【发布时间】:2020-12-27 18:27:54 【问题描述】:

我希望在整个 Xamarin 应用程序中使用一致的页脚。 为了尝试实现这一点,我在我的 App.xaml 类中有一个 ControlTemplate 元素,定义如下:

<ControlTemplate x:Key="MainPageTemplate">
     <StackLayout>
          <ContentPresenter VerticalOptions="FillAndExpand" />
              .
              .
              .
     </StackLayout>
</ControlTemplate>

我在我的 xaml 窗口中使用 ContentPage 标记内的ControlTemplate="StaticResource MainPageTemplate" 引用它。

但是,我有两个不是常规内容页面的页面,因为它们都以特定于平台的方式实现,一个带有 .axml 文件(.android 项目),一个带有情节提要文件(.ios 项目)。

有没有办法让这些文件使用 Xamarin ControlTemplate,这样即使视图的其余部分是特定于平台的,页脚仍会出现在视图的底部?

【问题讨论】:

【参考方案1】:

我们无法将特定平台的文件直接引用到 xaml。在您的情况下,如果您想在不同的平台上实现不同的效果,您可以使用 Device 类,如下所示

<StackLayout>
  <StackLayout.Margin>
    <OnPlatform x:TypeArguments="Thickness">
      <On Platform="iOS" Value="0,20,0,0" />
      <On Platform="Android, UWP" Value="0,0,0,0" />
    </OnPlatform>
  </StackLayout.Margin>
  ...
</StackLayout>

更多详情可以参考https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/device。

【讨论】:

此代码 sn-p 来自哪个文件?它来自 App.xaml 还是其他文件,为什么这有助于让所有文件都使用一个页脚栏? 您可以在任何 xaml 文件中使用 Device 类。 我想要说明的一点是,我只想在一个地方编写页脚的代码,它适用于所有视图,甚至适用于特定于平台的文件。如果我想实现这一点,我会将您建议的这个设备 xaml 放在哪里? 可以放在 ControlTemplate 中。 如果对你有帮助别忘了采纳哦:) 它将帮助更多有类似问题的人。

以上是关于如何在 Xamarin 中使用具有 android/IOS 特定视图的控制模板的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xamarin 跨平台应用程序中创建具有 sqlite 支持的 PCL

如何使用 Xamarin 渐变填充系统状态栏

我想在原生 App 的 Android Xamarin 布局中使图像具有粘性。我正在使用 axml 进行布局渲染 [关闭]

如何在 xamarin.forms 中添加视频播放器

如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

在 Xamarin UWP 中打印具有多个页面的 WebView