2016-07-15 166 views
0

我想要顯示列表中的數據和電子郵件中的數據。我必須要副總裁,並且我想要分別打開他們的電子郵件鏈接以打開外部電子郵件平臺。但是,代碼似乎無法正常工作,只會爲副總裁打開一封電子郵件,而包含該代碼的整個標籤似乎對此作出了反應。顯示列表中的數據Xamarin.Forms

這是它的屏幕截圖。

enter image description here

我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); 
      } 

     } 

回答

0

要解決此問題,您必須使用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); 
} 
1

這是因爲多副總裁,你只是追加文本到一個標籤。這意味着您首先添加一位副總裁和他的電子郵件的手勢識別器,然後爲其他人添加文本並註冊另一個手勢識別器。然後輕敲手勢被識別爲第一個手勢。

基本上,整個代碼運行後發生的事情是,標籤lbvPresident1Name包含所有副名稱和電子郵件,並具有多個GestureRecognizers(每個副手prezident一個)。

爲了解決這個問題,您應該例如創建一個副總裁名單,並將每個副總裁添加爲一個項目或添加一個容器併爲其中的每個人創建標籤。

要創建一個ListView在Xamarin.Forms看到的文檔 - https://developer.xamarin.com/samples/xamarin-forms/WorkingWithListview/

要創建一個容器,你可以從代碼上飛添加項目,StackLayout組件將在您的方案的最佳選擇。您只需將StackLayout代替當前標籤,然後在foreach循環中創建標籤並使用Children.Add方法將它們放入StackLayout中。