Я устанавливаю явное значение 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>
Ожидаемый дизайн:
Фактический дизайн:
hooray_icon
— изображение в формате PNG 512x512.
Версия Xamarin.Forms: 3.6.0.293080
P.S. Я знал, что проблему вызывает элемент Image
, используя методы class CustomImage : Image
и переопределения и отладки OnMeasure
и OnSizeAllocated
. Поправьте меня, если я ошибся.
HeightRequest
не гарантируется, это просто запрос. Если Xamarin.Forms может удовлетворить запрос, он реализует его, но в зависимости от размера экрана и макета он может не выполнить запрос.
Установите значение Grid.ColumnDefinition
Width
и Grid.RowDefinition
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>
Я понимаю, что это просто просьба. Дело в том, что я не мог понять, почему это не может быть выполнено. Это решение, однако, работает. Спасибо.
Можете ли вы попробовать Aspect с «AspectFill» или «AspectFit»