【问题标题】:Display data that is on the List Xamarin.Forms显示列表 Xamarin.Forms 上的数据
【发布时间】:2016-07-15 14:32:29
【问题描述】:

我想显示列表中的数据以及电子邮件。我必须向副总裁和我想分别打开他们电子邮件的链接以打开到外部电子邮件平台。但是,该代码似乎无法正常工作,它只为副总统打开一封电子邮件,并且包含它的整个标签似乎都对其做出了反应。

这是它的屏幕截图。

我的 Xmal 代码

<Label Text="Vice-President:" FontSize="18" FontAttributes="Bold" XAlign="Center" TextColor="Black"/>
                <StackLayout x:Name="vpDetails">

                </StackLayout>

我的 C# 代码

foreach (var item in leaderDetail)
        {
            Boolean IsPresident = item.IsPresident;

            if (IsPresident == true)
            {
                lbPresidentName.Text = item.Name;
                btnPresidentEmail.Text = item.Email;

                var tgrPresident = new TapGestureRecognizer();
                tgrPresident.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email));
                btnPresidentEmail.GestureRecognizers.Add(tgrPresident);
            }
            else 
            {
                vpDetails.Children.Add(new Label { Text = item.Name ,FontSize=14, HorizontalOptions = LayoutOptions.Center});

                vpDetails.Children.Add(new Label { Text = item.Email, FontSize=14, HorizontalOptions = LayoutOptions.Center, x:name="lbvPresident1Email"});

                //lbvPresident1Name.Text = item.Name;
                //lbvPresident1Email.Text = item.Email;

                var tgrVPEmail = new TapGestureRecognizer();
                tgrVPEmail.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email));
                lbvPresident1Email.GestureRecognizers.Add(tgrVPEmail);
            }

        }

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    这是因为对于多个副总裁,您只是将文本附加到一个标签上。这意味着您首先添加一个副总裁,以及他的手势识别器和他的电子邮件,然后为另一个添加文本并注册另一个手势识别器。然后第一个手势被识别。

    基本上在整个代码运行后发生的情况是标签lbvPresident1Name 包含所有副总统姓名和电子邮件,并且有多个 GestureRecognizers(每个副总统一个)。

    要解决此问题,您应该例如创建一个副总裁列表并将每个副总裁添加为一个项目,或者添加一个容器并动态为每个副总裁创建标签。

    要在 Xamarin.Forms 中创建 ListView,请参阅文档 - https://developer.xamarin.com/samples/xamarin-forms/WorkingWithListview/

    要创建一个容器,您可以从代码中动态添加项目,StackLayout 组件将是您方案中的最佳选择。您只需使用StackLayout 代替当前标签,然后在 foreach 循环中创建标签并使用Children.Add 方法将它们放入 StackLayout。

    【讨论】:

      【解决方案2】:

      要解决这个问题,您必须使用 StackLayout 作为容器。创建一个 Label 的 var 并添加到 foreach 循环中。

      DetailedClub.xaml

      <StackLayout x:Name="vpDetails"></StackLayout>
      

      DetailedClub.xaml.cs

      foreach (var item in leaderDetail)
      {
          //Create a new label for the Email
          var VpEmail = new Label { Text = item.Email, FontSize = 14, HorizontalOptions = LayoutOptions.Center };
      
          vpDetails.Children.Add(new Label { Text = item.Name ,FontSize=14, HorizontalOptions = LayoutOptions.Center});
      
          vpDetails.Children.Add(VpEmail);
      
          var tgrVPEmail = new TapGestureRecognizer();
          tgrVPEmail.Tapped += (s, e) => Device.OpenUri(new Uri("mailto:" + item.Email));
          VpEmail.GestureRecognizers.Add(tgrVPEmail); 
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-21
        • 2017-11-30
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 2018-07-22
        • 2018-01-03
        • 1970-01-01
        相关资源
        最近更新 更多