#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. Я понимаю, что это просто запрос. Дело в том, что я не смог понять, почему это не может быть выполнено. Однако это решение решает проблему. Спасибо.