ImageButtons на ListView вызывает у меня головную боль. Взгляните на рисунок здесь.
Как видите, скрытые кнопки ImageButton (3 вертикальные точки справа от каждой строки ListView) становятся супермаленький, как ListView прокручивается вверх и вниз.
Это соответствующий XAML:
<ImageButton
Source="more_options"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Clicked="OnMoreOptionsTapped"
CommandParameter="{Binding .}"
Grid.Column="2"
Grid.Row="0"/>
Полный XAML здесь. ImageButton находится в строке 56.
Я что-то не так делаю?Как я могу это исправить?
Кроме того, я знаю, что могу использовать только изображение с TapGestureRecognizer, но для меня это большая проблема, потому что мне нужен доступ к элементу Image, чтобы получить его координаты ипородить меню в нужном месте.Сделать это с помощью ImageButton - это очень просто, но с TapGestureRecognizer это не так просто.Я сделал что-то вроде этого:
XAML
<Image
Source="more_options"
Aspect="AspectFit"
HorizontalOptions="End"
WidthRequest="21"
BackgroundColor="Transparent"
Grid.Column="2"
Grid.Row="0">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnMoreOptionsTapped"
CommandParameter="{Binding .}"/>
</Image.GestureRecognizers>
</Image>
Код-позади:
private void OnMoreOptionsTapped(object sender, TappedEventArgs args)
{
var tapGesture = sender as TapGestureRecognizer;
var button = tapGesture.Parent as Image;
...
}
В основном, сэлемент ImageButton, object sender
- это элемент ImageButton, но с изображением object sender
- это TapGestureRecognizer, и я не могу найти способ получить родительский объект Image, пока у меня есть только дочерний элемент TapGestureRecognizer.Кроме того, tapGesture.Parent
равно нулю и tapGesture.Parent.Parent
также равно нулю.Я пробовал оба.
Итак:
- Кнопки ImageButback в ListView сильно глючат.У кого-нибудь есть исправление?
- Кто-нибудь может сказать мне, как получить родительский объект Image, имеющий только дочерний объект TapGestureRecognizer?
Я думаю, что ответ на любой из этих двух вопросов решит мою проблему, хе-хе.
Кроме того, это один из моих первых опытов, когда я задаю вопросы здесь, прошу прощения, если я сделал что-то не так.
Спасибо всем:)