我可以在Xaml中使用Device.OnPlatform设置设备特定视图吗?

时间:2016-06-03 09:53:46

标签: c# xaml xamarin xamarin.forms

我正在尝试在Xaml中的不同平台上呈现特定于设备的视图。

查看this link我可以看到我可以在Xaml中使用Device.OnPlatform设置属性,如下所示:

<ContentPage.Resources>
<ResourceDictionary>
<OnPlatform x:Key=”standardFont” x:TypeArguments=”Font”>
<OnPlatform.iOS>12</OnPlatform.iOS>
<OnPlatform.Android>12</OnPlatform.Android>
<OnPlatform.WinPhone>18</OnPlatform.WinPhone>
</OnPlatform>
</ResourceDictionary>
</ContentPage.Resources>

但我想在每个平台上设置这样的视图:

<ContentPage.Resources>
<ResourceDictionary>
<OnPlatform x:Key=”NumericTextBox” x:TypeArguments=”View”>
<OnPlatform.iOS><sf:NumericTextBox/></OnPlatform.iOS>
<OnPlatform.Android><sf:NumericTextBox/></OnPlatform.Android>
<OnPlatform.WinPhone><Entry/></OnPlatform.WinPhone>
</OnPlatform>
</ResourceDictionary>
</ContentPage.Resources>

我需要这个的原因是因为Syncfusion NumericTextBox在Windows上不起作用(我已报告此错误,但这是一种解决方法)

这可能吗?

PS。我了解自定义渲染器,但在这种情况下,因为已经有Syncfusion数字文本框的自定义渲染器,我无法使用此技术

1 个答案:

答案 0 :(得分:4)

你几乎拥有它。您只需要使用ContentView 将其Content属性设置为您的静态资源。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="XFApp3.Page1">
   <ContentPage.Resources>
     <ResourceDictionary>
       <OnPlatform x:Key=”NumericTextBox” x:TypeArguments=”View”>
       <OnPlatform.iOS><sf:NumericTextBox/></OnPlatform.iOS>
       <OnPlatform.Android><sf:NumericTextBox/></OnPlatform.Android>
       <OnPlatform.WinPhone><Entry/></OnPlatform.WinPhone>
       </OnPlatform>
     </ResourceDictionary>
   </ContentPage.Resources>
   <!-- That's the line you are missing -->
   <ContentView Content="{StaticResource NumericTextBox}" ></ContentView>
</ContentPage>

你准备输入一些数字。