Xamarin.Forms将一个GestureRecognizer添加到ListView中的图像

Wic*_*edW 9 xamarin xamarin.forms

我正在尝试向ListView中的图像添加点按手势

下面的图像在没有Image.GestureRecognizers部分的ListView中正确呈现,但是使用它,ListView根本不呈现任何内容(没有错误消息). 为了澄清这一点,ListView中还有一个Label,它也不会呈现.

<Image x:Name="newsImage" VerticalOptions="End" HeightRequest="200" WidthRequest="200" Aspect="AspectFill" Source="{Binding Imageurllarge}">
                        <Image.GestureRecognizers>
                            <TapGestureRecognizer 
                                Tapped="OnTapGestureRecognizerTapped" 
                                NumberOfTapsRequired="1" />
                        </Image.GestureRecognizers>
                    </Image>
Run Code Online (Sandbox Code Playgroud)

我从http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/gestures/获取此信息(假设此示例不是列表视图图像,但假设它应该在列表视图中工作) .

另外(根据评论建议)

<Image.GestureRecognizers>
    <TapGestureRecognizer 
      Command="{Binding TapCommand}" 
      CommandParameter="newsImage" />
Run Code Online (Sandbox Code Playgroud)

似乎没有更好的公平.

如果有人有一个如何在后面的代码中添加这个的例子(没有视图模型很好)那么这样做.

小智 3

您可以在 ListView 中使用 DataTemplate,并且在 DataTemplate 内部有一个 Grid,然后添加 UI 元素。在给定的示例中,我显示了姓名、联系电话和图像,我在图像上使用了手势识别器。尝试这个:

<ListView x:Name="myListView" ItemsSource="{Binding Contacts}" >             
<ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell Height="75">
        <Grid Padding="5">
            <Grid.RowDefinitions>
                <RowDefinition Height="20"></RowDefinition>
                <RowDefinition Height="20"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30" />
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="80"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Image Source="user_img.png" Grid.Column="0" Grid.RowSpan="2" VerticalOptions="CenterAndExpand"/>
            <Label Grid.Row="0" Grid.Column="1" Font="16" Text="{Binding DisplayName}" LineBreakMode="TailTruncation"></Label>
            <Label Grid.Row="1" Grid.Column="1" Font="12" Text="{Binding Number}"  LineBreakMode="TailTruncation"></Label>

            <Image Grid.Row="0" Grid.RowSpan="3"  Grid.Column="2" Source="add.png" Aspect="AspectFill">
            <Image.GestureRecognizers>
                <TapGestureRecognizer 
                    Command="{Binding AddCommand}" 
                    CommandParameter="{Binding Number}" />
                  </Image.GestureRecognizers>
            </Image>        
        </Grid>
        </ViewCell>
     </DataTemplate>
   </ListView.ItemTemplate>    
</ListView>
Run Code Online (Sandbox Code Playgroud)