0

양식 내가 다음에 원하는 항목의 가로 목록을 스크롤 할 때 가로 목록의 가운데 하나를 자동으로 선택하고 해당 값의 레이블에 선택한 값을 표시하고 다른 가로 목록도 원하기를 원합니다. 자동으로 스크롤되고 동일하게 수행됩니다 (개별 레이블의 모든 값은 각각 오프셋 값의 차이를 유지해야합니다).수평 목록에서 라벨에 TapGestureRecognizer 적용 - 자 마린은</p> <p><a href="https://i.stack.imgur.com/jPbGg.png" rel="nofollow noreferrer">Sample screenshot of horizontal list as item in ListView</a></p> <p>.. 내가있는 ListView의 항목으로 몇 가지 숫자의 수평 목록을 넣어 노력하고 내가 그 멋진 외모와 함께 수행하고

이것은 까다 롭습니다. GestureRecognizer가 여기에서 도움이 될 것이라는 것을 알고 있습니다.하지만 여기에서 구현하는 방법과 장소를 혼동합니다. 출력으로 위의 스크린 샷을 제공하는 모든 코드를 작성합니다 여기 .. ​​

namespace ViewsAndComponents 
{ 
    class LVItem : INotifyPropertyChanged 
    { 
    private double _offset; 
    private string _num; 

    public string Num 
    { 
     get { return _num; } 
     internal set 
     { 
      _num = value; 
      OnPropertyChanged("Num"); 
     } 
    } 

    public double Offset 
    { 
     get { return _offset; } 
     internal set 
     { 
      _offset = value; 
      OnPropertyChanged("Offset"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

public partial class SVInsideLVItem : ContentPage 
{ 
    ObservableCollection<LVItem> Items = new ObservableCollection<LVItem>(); 
    ListView timePlannerLV; 

    Label tL; 

    public SVInsideLVItem() 
    { 
     InitializeComponent(); 

     Items.Add(new LVItem() { Num = "label-1", Offset = 5 }); 
     Items.Add(new LVItem() { Num = "label-2", Offset = 1 }); 
     Items.Add(new LVItem() { Num = "label-3", Offset = 3 }); 
     Items.Add(new LVItem() { Num = "label-4", Offset = 2 }); 
     Items.Add(new LVItem() { Num = "label-5", Offset = 4 }); 

     timePlannerLV = new ListView 
     { 
      // Source of data items. 
      ItemsSource = Items, 
      HasUnevenRows = true, 
      RowHeight = -1, 

      //each item; it must return a Cell derivative.) 
      ItemTemplate = new DataTemplate(() => 
       { 

        Label numL = new Label() 
        { 
         TextColor = Color.Black, 
         HorizontalTextAlignment = TextAlignment.Start, 
         FontSize = Device.GetNamedSize(NamedSize.Small, new Label()) 
        }; 

        numL.SetBinding<LVItems>(Label.TextProperty, indexer => indexer.Num); 


        List<int> items = new List<int>(); 
        items.Add(1); 
        items.Add(2); 
        items.Add(3); 
        items.Add(4); 
        items.Add(5); 
        items.Add(6); 
        items.Add(7); 
        items.Add(8); 
        items.Add(9); 
        items.Add(10); 
        items.Add(11); 
        items.Add(12); 
        items.Add(13); 
        items.Add(14); 
        items.Add(15); 
        items.Add(16); 
        items.Add(17); 
        items.Add(18); 
        items.Add(19); 
        items.Add(20); 

        StackLayout sLayout = new StackLayout() 
        { 
         Orientation = StackOrientation.Horizontal, 

        }; 

        for (int i = 0; i < items.Count; i++) 
        { 
         Label label = new Label() 
         { 
          HorizontalTextAlignment = TextAlignment.Center, 
          TextColor = Color.Black, 
          FontSize = Device.GetNamedSize(NamedSize.Small, new Label()) 
         }; 

         label.Text = items[i].ToString(); 

         sLayout.Children.Add(label); 
        } 

        ScrollView scroll = new ScrollView 
        { 
         Orientation = ScrollOrientation.Horizontal, 
         Content = new StackLayout 
         { 
          Children = 
         { 
          sLayout 
          } 

         } 
        }; 

        AbsoluteLayout layout = new AbsoluteLayout(); 
        AbsoluteLayout.SetLayoutFlags(numL, AbsoluteLayoutFlags.All); 
        AbsoluteLayout.SetLayoutBounds(numL, new Rectangle(0.2, 0.2, 0.8, 0.25)); 

        AbsoluteLayout.SetLayoutFlags(scroll, AbsoluteLayoutFlags.All); 
        AbsoluteLayout.SetLayoutBounds(scroll, new Rectangle(0.3, 0.6, 0.8, 0.2)); 


        layout.Children.Add(numL); 
        layout.Children.Add(scroll); 

        return new ViewCell 
        { 
         View = new StackLayout 
         { 
          Children = 
         { 
          layout, 
          new BoxView{HeightRequest=1,BackgroundColor=Color.Gray} 
         } 

         } 
        }; 
       }) 
     }; 

     this.Content = new StackLayout 
     { 
      Children = 
      { 
        timePlannerLV 
      } 
     }; 
    } 

} 

} 

는 어떤 도움 당신이 여기에 수행 할 작업을 완전히 확실하지 않다 ..하지만 당신은 라벨에 gesturerecognizer를 추가 할 필요가

답변

0

.. .. 미리 감사 감사하겠습니다 당신은 생성합니다. 따라서 다음과 같이 추가하십시오.

Label label = new Label() 
{ 
    HorizontalTextAlignment = TextAlignment.Center, 
    TextColor = Color.Black, 
    FontSize = Device.GetNamedSize(NamedSize.Small, new Label()) 
}; 

label.Text = items[i].ToString(); 

var gestureRecognizer = new TapGestureRecognizer { 
    TappedCallback = o => selectedLabel.Text = o, 
    NumberOfTapsRequired = 1 
}; 

label.GestureRecognizers.Add (gestureRecognizer); 

sLayout.Children.Add(label); 

희망적으로 사용하면 도움이 될 것입니다.

관련 문제