Получите очки HeightRequest (RelativeLayout) по изображению реального размера через Xamarin.Forms

Мне нужно получить HeightRequest(RelativeLayout) баллов по изображению реального размера. Я получаю изображение с сервера. Это размер 720x250. Мне нужно использовать RelativeLayout.

<ListView
                x:Name="EventsListView"
                GroupDisplayBinding="{Binding EventGroupTitle}"
                HasUnevenRows="True"
                IsGroupingEnabled="True"
                ItemTapped="ListView_OnItemTapped"
                ItemsSource="{Binding GroupedItems}"
                SeparatorVisibility="None">
                <ListView.GroupHeaderTemplate>
               </ListView.GroupHeaderTemplate>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell BindingContextChanged="BindableObject_OnBindingContextChanged">

                            <RelativeLayout x:Name="RelativeLayout" Padding="0">
                                <!--  Background picture  -->
                                <controls:BExtendedCachedImage
                                    x:Name="Picture"
                                    Aspect="AspectFit"
                                    CacheType="Disk"
                                    DownsampleToViewSize="True"
                                    LoadingPlaceholder="backgroundBlur"
                                    RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToView,
                                                                                           ElementName=RelativeLayout,
                                                                                           Property=Height}"
                                    RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView,
                                                                                          ElementName=RelativeLayout,
                                                                                          Property=Width}"
                                    Source="{Binding Picture}" />
                            </RelativeLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Source="{Binding Picture}" - моя картинка с сервера. В коде программной части в BindableObject_OnBindingContextChanged мне нужно изменить HeightRequest (RelativeLayout). Но если я не установлю высоту вручную, ячейка растянется на полную высоту.

Вот мой код:

private void BindableObject_OnBindingContextChanged(object sender, EventArgs e)
    {
        var cell = (ViewCell) sender;
        var layout = cell.View.FindByName<RelativeLayout>("RelativeLayout");
        var bc = (GroupEventsMapPageModel) BindingContext;
        layout.HeightRequest = THIS_MANUAL_VALUE;
    }

Как я могу получить THIS_MANUAL_VALUE?

Я пробовал через этот код:

var device = Resolver.Resolve<IDevice>();
        var display = device.Display;
        return display.Scale;

Изображение Height (250) \ display.Scale - не работает. Я создаю вкладку.

Устройство xxxhdpi (640 dpi) - 4 (Масштаб) - layout.HeightRequest = 79;
Устройство xxxhdpi (560 dpi) - 3,5 (Масштаб) - layout.HeightRequest = 93;
Устройство xhdpi (315 dpi) - 2 (Масштаб) - layout.HeightRequest = 110;
Устройство hdpi (240 т/д) - 1,5 (Масштаб) - layout.HeightRequest = 165;

Однако заметил, что при смене диагонали.

Устройство 4,7" xxhdpi (420 т/д) - 2,625 (Масштаб) - layout.HeightRequest = 87;
Устройство 5,2" xxhdpi (420 т/д) - 2,625 (Масштаб) - layout.HeightRequest = 130;

Как я могу получить формулу?


person Igor Strekha    schedule 08.03.2017    source источник
comment
Этот вопрос витает повсюду. Какую высоту вы ищете?   -  person Joshua Poling    schedule 09.03.2017
comment
@ Джошуа Полинг, я ищу HeightRequest (точка Xamarin). Например, ‹StackLayout HeightRequest=40 /›   -  person Igor Strekha    schedule 09.03.2017


Ответы (1)


Если вы хотите установить высоту:

StackLayout _mainStack = new StackLayout{ HeightRequest = 40};

если вы хотите получить высоту:

var _stacksHeight = _mainStack.Height;

Первый получает или задает желаемое переопределение высоты для этого элемента. Второе свойство доступно только для чтения и позволяет получить отображаемую высоту _mainStack.

person Joshua Poling    schedule 09.03.2017