Элемент управления Xamarin Forms Image выделяет больше высоты, чем запрошено

Я устанавливаю явное значение HeightRequest of 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>

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

Элемент управления Xamarin Forms Image выделяет больше высоты, чем запрошено

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

Элемент управления Xamarin Forms Image выделяет больше высоты, чем запрошено

hooray_icon — изображение в формате PNG 512x512.

Версия Xamarin.Forms: 3.6.0.293080

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

Можете ли вы попробовать Aspect с «AspectFill» или «AspectFit»

Nirmal Subedi 09.04.2019 18:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечать

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

Решение

Установите значение Grid.ColumnDefinitionWidth и Grid.RowDefinitionHeight.

Код

<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>

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

Aly Elhaddad 09.04.2019 19:23

Другие вопросы по теме