Xamarin 表单中 StackLayout 上的动态 TapGestureRecognizer

Posted

技术标签:

【中文标题】Xamarin 表单中 StackLayout 上的动态 TapGestureRecognizer【英文标题】:Dynamic TapGestureRecognizer on StackLayout in XamarinForms 【发布时间】:2020-06-01 01:50:48 【问题描述】:

我有下面的代码,我基本上是循环一个列表并使用该列表的属性作为值:

SLTData.g_RecentLoans.ForEach(x => 
    colorCode = loanHistoryViewModel.GetStatusColor(x.ActivityListID);
    principal = utilities.FormatCurrency(x.PAMT);
    formattedDate = loanHistoryViewModel.ConvertDate(x.DateRequested);

    stackRecentList.Children.Add(
             new Frame 
                BackgroundColor = Color.White,
                Margin = new Thickness(30, 20, 30, 0),
                Padding = new Thickness(10),
                CornerRadius = 5,
                HasShadow = true,
                Content = new StackLayout 
                    Orientation = StackOrientation.Horizontal,
                    Spacing = 0,
                    Children = 
                        // Content here
                        // The 'x' variables are used inside this StackLayout
                    
                
            
        );
);

问题是,我想在循环中 StackLayout 的每次迭代中添加一个 TapGestureRecognizer。我尝试在 StackLayout 的右括号中添加.GestureRecognizers.Add(tapGestureRecognizer),但它显示Cannot implicitly convert type 'void' to 'Xamarin.Forms.View'

我基本上想要做的是向处理点击的函数添加一个参数,该参数是传递给 API 的关键字。

【问题讨论】:

那是因为你必须将它应用到 Add 方法,检查括号并将它应用到你的 View !!! 【参考方案1】:

我想在循环中StackLayout的每次迭代中添加一个TapGestureRecognizer。

也许你在为StackLayout添加tapGestureRecognizer时遇到了一些问题,我提供了一些代码你可以看看:

  private  void loadtap()
    
        for(int i=0;i<5;i++)
        
            Frame f = new Frame()
            
                BackgroundColor = Color.White,
                Margin = new Thickness(30, 20, 30, 0),
                Padding = new Thickness(10),
                CornerRadius = 5,
                HasShadow = true,

            ;

            StackLayout stack = new StackLayout()
            
                Orientation = StackOrientation.Horizontal,
                Spacing = 0,
                Children =  new Label()Text="this is test"

                
            ;

            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += (s, e) => 
              DisplayAlert("Alert", "You have been click tap", "OK");
            ;

            stack.GestureRecognizers.Add(tapGestureRecognizer);
            f.Content = stack;

            stacklist.Children.Add(f);
        
    

【讨论】:

以上是关于Xamarin 表单中 StackLayout 上的动态 TapGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 形成 MVVM Stacklayout 内容绑定

Xamarin 在底部形成相对布局位置 stacklayout

Xamarin Forms - 内容未在 stackLayout 中垂直居中对齐

Xamarin 表单:用于静态内容的 CarouselView

Xamarin在ListView中使用StackLayout可见性形成跨平台问题

Stacklayout 上所有 3 个平台(Android、iOS、UWP)中的 Xamarin 长按事件