通过Xamarin.Forms获取真实大小图像的HeightRequest点(RelativeLayout)

时间:2017-03-08 22:13:15

标签: xamarin.ios xamarin.android xamarin.forms screen-size hdpi

我需要通过实际尺寸图像获得HeightRequestRelativeLayout)点。我从服务器获取图像。它的大小为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中的代码异化中,我需要更改HeightRequestRelativeLayout)。但如果我没有手动设置高度,则单元格将拉伸至全高。 请看我的代码隐藏。

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_MANUALL_VALUE;
    }

请帮忙,我怎样才能获得THIS_MANUALL_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 dpi) - 1.5(比例) - layout.HeightRequest = 165; 但是,我注意到在改变对角线时。 4.7&#34; xxhdpi设备(420 dpi) - 2.625(比例) - layout.HeightRequest = 87; 5,2&#34; xxhdpi设备(420 dpi) - 2.625(比例) - layout.HeightRequest = 130; 帮我搞定公式。

1 个答案:

答案 0 :(得分:0)

如果你想设置身高:

StackLayout _mainStack = new StackLayout{ HeightRequest = 40};

如果您正在寻找高度:

var _stacksHeight = _mainStack.Height;

第一个获取或设置此元素的所需高度覆盖。 第二个是只读属性,用于获取_mainStack的渲染高度。