xamarin.forms устанавливает толщину в xaml - PullRequest
1 голос
/ 05 июня 2019

У меня есть следующий 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

Есть предложения?Что бы это ни стоило, я знаю, что могу переопределить OnAppearance в C #, но я пытаюсь следовать лучшей практике, сохраняя внешний вид в XAML и логику в C #, что делает это излишне трудным.Я действительно хотел бы, чтобы XAML был лучше задокументирован, чтобы подобные проблемы были обнаружены во время компиляции, и код в документации действительно делал то, что говорит: (

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Заполнением, которое вы пытаетесь обработать, управляет iOS + Xamarin.Forms, называемое Безопасная область , и вы можете управлять им, попросив Xamarin.Forms принять во внимание эту область:

xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
ios:Page.UseSafeArea="true"

enter image description here

<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"
    xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
    ios:Page.UseSafeArea="true"
    BackgroundColor="Yellow">    
    <StackLayout BindingContext="{x:Reference slider}"
                 HorizontalOptions="Center"
                 BackgroundColor="Blue">
        <BoxView Color="Green"
                 Opacity="{Binding Value}"/>
        <Label Text="{Binding Value,
               StringFormat='Value is {0:F2}' }"
               Opacity="{Binding Value }"/>
        <Slider x:Name="slider"/>
    </StackLayout>
</ContentPage>
0 голосов
/ 05 июня 2019

После некоторой игры я понял, что это настоящая ошибка: проблема исчезает, когда вы устанавливаете второе значение, отличное от 20.

... почему на Земле это это ошибка, я, вероятно, никогда не узнаю.Если вы читаете это, вы можете поправить меня / дать лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...