从 Xamarin 中的 GestureRecognizers 获取 CommandParameter 值

Sha*_*mar 1 c# xaml xamarin.forms

我正在发送CommandParameterTapGestureRecognizer,并且它在我的函数的对象参数中可用OnTapGestureRecognizerTapped。但我无法从中提取价值。我怎样才能解决这个问题?

我的列表视图(XAML 标记):

<ListView x:Name="listViewEvents" RowHeight="120" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid Padding="5">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="40"></RowDefinition>
                        <RowDefinition Height="60"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="90"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <Label Grid.Row="0" Grid.Column="0" FontSize="Large" Grid.ColumnSpan="2"  Text="{Binding UploadTitle}" LineBreakMode="TailTruncation"></Label>
                    <Label Grid.Row="1" Grid.Column="0" Text="{Binding UploadDescription}" Font="Small"  TextColor="Gray" LineBreakMode="TailTruncation"></Label>
                    <Image Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" Source="{Binding AttachPath}" Aspect="AspectFill">
                        <Image.GestureRecognizers>
                            <TapGestureRecognizer
                                Tapped="OnTapGestureRecognizerTapped"
                                NumberOfTapsRequired="2"
                                CommandParameter="{Binding AttachPath_New}"
                                />
                        </Image.GestureRecognizers>
                    </Image>
                    <Label Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding FileName}" LineBreakMode="TailTruncation"></Label>
                </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

我的 C# 页面:

void OnTapGestureRecognizerTapped(object sender, EventArgs args)
{
        string fullPath = "";
        Image imageSender = (Image)sender;

        if (imageSender.GestureRecognizers.Count > 0)
        {
            fullPath = imageSender.GestureRecognizers[0].ToString();
        }
        DownloadFile(imageSender.Source.GetValue(UriImageSource.UriProperty).ToString());
}
Run Code Online (Sandbox Code Playgroud)

在这里我得到了我的价值:

在此输入图像描述

小智 6

您可以使用的另一个解决方案是将 EventArgs 类型转换为 TappedEventArgs 并公开参数。因此,要访问 CommandParameter,您可以编写以下内容:

private void OnTapped(object sender, EventArgs e)
{
var te = (TappedEventArgs)e;
string parameter = (string)te.Parameter;
....
Run Code Online (Sandbox Code Playgroud)