У меня есть ListView
:
<ListView
CachingStrategy="RecycleElement"
x:Name="ItemList"
HasUnevenRows="True"
BackgroundColor="Transparent"
SeparatorColor="{x:Static local:LmcColor.defaultFg}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
IsVisible="False"
ItemSelected="ItemList_ItemSelected"/>
Его ItemTemplate
инициализируется следующим образом:
ItemList.ItemTemplate = new DataTemplate(() =>
new ViewCell() { View = new ItemReadView() });
И ItemReadView
- это ContentView
, содержащий StackView
, содержащий Image
, называемый ItemImage
. Я определяю распознаватель жестов для этого Image
:
TapGestureRecognizer handler = new TapGestureRecognizer();
handler.Tapped += ((object sender, EventArgs e) =>
{
// Do stuff!
});
ItemImage.GestureRecognizers.Clear();
ItemImage.GestureRecognizers.Add(handler);
В Xamarin Forms 2.5.1.444934 он работал нормально. Теперь, в 3.3.0.967583, «Делать вещи» вызывается для нескольких видов изображений после одного нажатия. Я не уверен, что проблема присутствовала в формах 3.1.0.637273. Ошибка затрагивает только iOS.
В качестве обходного пути я добавил задержку в 200 мсек, прежде чем «делать вещи», и «вещи» не «делаются», если в этот интервал приходит новое событие. К счастью, «настоящее» событие приходит последним. К сожалению, чем больше я прокручиваю представление списка перед нажатием, тем больше событий происходит, и я боюсь какого-то переполнения ресурса.
Кто-нибудь это заметил? Есть ли "правильные" исправления? Есть что-то, что я могу делать не так? Должен ли я заменить TapGestureRecognizer
чем-то другим, и если да, то чем?
Спасибо!