Как привязать визуальный элемент HeightRequest, находящийся внутри ScrollView, к высоте страницы? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь установить Высота BoxView на Высоту страницы (для этого я использую Xamarin Essentials). BoxView содержится в StackLayout, а StackLayout содержится в ScrollView следующим образом:

<ScrollView Orientation="Vertical">
    <StackLayout>
        <BoxView HeightRequest="{Binding height}" x:Name="TestBox" BackgroundColor="Orange" />
        <BoxView BackgroundColor="Red" HeightRequest="200" />
    </StackLayout>
</ScrollView>

Запрос высоты для BoxView определяется в моем коде позади.

Я пробовал установка этой переменной на высоту устройства в моем OnAppearing() и в конструкторе страницы, но оба раза окно просмотра не заполняет всю страницу, вот что я попробовал:

public Double height;

public MainPage()
{  
    InitializeComponent();
    height = DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density;
}

Результат :

Example

Я также попытался добавить следующее после установки высоты, но это тоже не сработало:

this.ForceLayout();

Тем не менее, я получаю желаемый результат, если я вручную установил HeightRequest (однако, это будет работать только на моем указанном c устройстве):

<BoxView HeightRequest="720" x:Name="TestBox" BackgroundColor="Orange" />

Как я могу связать Высоту BoxView к высоте страницы, если BoxView находится внутри ScrollView?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы не установили bindingContext в коде, поэтому HeightRequest="{Binding height}" не будет работать.

Кроме того, помните, что вы должны определить высоту как Свойство .

public partial class MainPage : ContentPage
{

    public Double height { get; set; }

    public MainPage()
    {
        InitializeComponent();

        height = DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density;

        BindingContext = this;
    }
}

Я сделал тест, после добавления bindingContext и определил высоту как Свойство , ваши коды хорошо работают:).

1 голос
/ 27 января 2020

Свяжите свойство Height родительского элемента scrollview (прямого потомка ContentPage), используя x: reference. Это сработало для меня.

<ScrollView x:Name="parentLayout">
    <StackLayout>
        <BoxView
            BackgroundColor="LightBlue"
            HeightRequest="{Binding Height, Source={x:Reference parentLayout}}"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
        <Label
            Text="Below BoxView"/>
    </StackLayout>
</ScrollView>

Результат пользовательского интерфейса iOS (пробел из-за безопасной зоны)

enter image description here

Надеюсь, это поможет вам , Прокомментируйте, если это не ваше требование.

...