У меня есть следующий XAML:
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Foo"
x:Class="Foo.MainPage">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<OnPlatform.iOS>0, 20, 0, 0</OnPlatform.iOS>
</OnPlatform>
</ContentPage.Padding>
<StackLayout BindingContext="{x:Reference slider}"
HorizontalOptions="Center">
<BoxView Color="Green"
Opacity="{Binding Value}" />
<Label Text="{Binding Value,
StringFormat='Value is {0:F2}' }"
Opacity="{Binding Value }"/>
<Slider x:Name="slider"/>
</StackLayout>
Он пытается (и не может) установить отступ в 20 пикселей вверху на iOS.Совершенно прямолинейно, именно так, как предлагается онлайн - не работает.Заполнение по-прежнему четко 0 - см. Ниже.Я действительно не понимаю, в чем проблема - это вполне разумный фрагмент XAML, и, прежде чем вы спросите, нет, что-то вроде:
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0, 20, 0, 0" />
</OnPlatform>
</ContentPage.Padding>
тоже не работает.Сгенерированный код:
// MainPage.xaml.g.cs
[global::Xamarin.Forms.Xaml.XamlFilePathAttribute("MainPage.xaml")]
public partial class MainPage : global::Xamarin.Forms.ContentPage {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "2.0.0.0")]
private global::Xamarin.Forms.Slider slider;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "2.0.0.0")]
private void InitializeComponent() {
global::Xamarin.Forms.Xaml.Extensions.LoadFromXaml(this, typeof(MainPage));
slider = global::Xamarin.Forms.NameScopeExtensions.FindByName<global::Xamarin.Forms.Slider>(this, "slider");
}
}
Изображение:
![enter image description here](https://i.stack.imgur.com/x6LbP.png)
Есть предложения?Что бы это ни стоило, я знаю, что могу переопределить OnAppearance в C #, но я пытаюсь следовать лучшей практике, сохраняя внешний вид в XAML и логику в C #, что делает это излишне трудным.Я действительно хотел бы, чтобы XAML был лучше задокументирован, чтобы подобные проблемы были обнаружены во время компиляции, и код в документации действительно делал то, что говорит: (