Xamarin формирует элемент управления изображением, выделяющий большую высоту, чем запрошено

#c# #.net #xaml #xamarin #xamarin.forms

#c# #.net #xaml #xamarin #xamarin.forms

Вопрос:

Я устанавливаю явное HeightRequest значение 16 для своего Image элемента; однако при отладке фактическое Height значение, похоже, перешло на 70 . Вот мой Xaml:

 <Grid Margin="1" Padding="0" ColumnSpacing="0" RowSpacing="0" HeightRequest="17">
    <BoxView CornerRadius="3" Color="LightGray"/>
    <BoxView Margin="1" CornerRadius="3" BackgroundColor="White"/>
    <StackLayout Margin="2,0,2,0" Orientation="Horizontal" HeightRequest="17" Spacing="0">
        <Image Source="hooray_icon"
               WidthRequest="16"
               HeightRequest="16"
               Margin="1,0,1,0"
               Aspect="Fill"/>
        <Label Text="{Binding HoorayCount}"
               Margin="1,0,1,0"
               VerticalOptions="Center"
               VerticalTextAlignment="Center"
               HorizontalOptions="Center"
               HorizontalTextAlignment="Center"
               HeightRequest="16"/>
    </StackLayout>
</Grid>
  

Ожидаемый дизайн:

Ожидаемый

Фактический дизайн:

Фактический

hooray_icon это изображение PNG размером 512×512.

Xamarin.Версия формы: 3.6.0.293080

P.S Я знал, что это был Image элемент, который вызывал проблему, используя class CustomImage : Image и переопределяя и OnMeasure OnSizeAllocated методы отладки и . Поправьте меня, если я ошибся.

Комментарии:

1. Можете ли вы попробовать Aspect с помощью «AspectFill» или «aspectFit»

Ответ №1:

Ответ

HeightRequest не гарантируется, это просто запрос. Если Xamarin.Forms может удовлетворить запрос, он его реализует, но в зависимости от размера экрана и макета он может не выполнить запрос.

Решение

Установите значение Grid.ColumnDefinition ‘s Width и Grid.RowDefinition ‘s Height .

Код

 <Grid Margin="1" Padding="0" ColumnSpacing="0" RowSpacing="0">
  <Grid.RowDefinitions>
    <RowDefinition Height="17" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="17" />
    <ColumnDefinition Width="17" />
    <ColumnDefinition Width="17" />
  </Grid.ColumnDefinitions>
    <BoxView CornerRadius="3" Color="LightGray" Grid.Row="0" Grid.Column="0"/>
    <BoxView Margin="1" CornerRadius="3" BackgroundColor="White" Grid.Row="0" Grid.Column="1"/>
    <StackLayout Margin="2,0,2,0" Orientation="Horizontal" Spacing="0" Grid.Row="0" Grid.Column="2">
        <Image Source="hooray_icon"
               Margin="1,0,1,0"
               Aspect="Fill"
               HeightRequest="16"/>
        <Label Text="{Binding HoorayCount}"
               Margin="1,0,1,0"
               VerticalOptions="Center"
               VerticalTextAlignment="Center"
               HorizontalOptions="Center"
               HorizontalTextAlignment="Center"
               HeightRequest="16"/>
    </StackLayout>
</Grid>
  

Комментарии:

1. Я понимаю, что это просто запрос. Дело в том, что я не смог понять, почему это не может быть выполнено. Однако это решение решает проблему. Спасибо.