xamarin形成动态图像tapgesture识别器控制

时间:2018-05-17 00:26:56

标签: xamarin dynamic xamarin.forms

如何通过点击?

来控制(更改)在xamarin表单中创建的动态图像
Image ggImage = new Image()
ggImage.Source = otoTip.imagex
ggImage.AutomationId = "seat_" +otoTip.num
ggImage.WidthRequest = imageWidth
ggImage.HeightRequest = 50
ggImage.VerticalOptions = LayoutOptions.Start
ggImage.HorizontalOptions = LayoutOptions.Start
ggImage.GestureRecognizers.Add(tapGestureRecognizer)

例如,我只想更改简历来源。

1 个答案:

答案 0 :(得分:1)

您必须实施TapGestureRecognizer,然后将其添加到您的图片......

Image ggImage = new Image();
ggImage.Source = otoTip.imagex
ggImage.AutomationId = "seat_" +otoTip.num
ggImage.WidthRequest = imageWidth        
ggImage.HeightRequest = 50;
ggImage.VerticalOptions = LayoutOptions.Start;
ggImage.HorizontalOptions = LayoutOptions.Start;

// your TapGestureRecognizer implementation, this is just a sample...
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => { ggImage.Source = yourNewSource };
ggImage.GestureRecognizers.Add(tapGestureRecognizer);

为了更改动态创建的图片的每张独特图片,您可以扩展OtoTip类和

public class OtoTip : INotifyPropertyChanged
{
    public int x { get; set; }
    public int y { get; set; }
    public int num { get; set; }
    public int near { get; set; }
    public int status { get; set; }

    public int yy { get; set; }
    public int xx { get; set; }


    // xx
    private string _imagex;
    public string imagex
    {
        get { return _imagex; }
        set
        {
            _imagex = value;
            OnPropertyChanged(nameof(imagex));
        }
    }

    private string _imageActivex;
    public string imageActivex
    {
        get { return _imageActivex; }
        set
        {
            _imageActivex = value;
            OnPropertyChanged(nameof(imageActivex));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

您必须立即延长getVoyagesData(),同时将imageActivex设置为标准图片。

现在您必须调整TapGestureRecognizer以使用新属性

tapGestureRecognizer.Tapped += (s, e) => 
{ 
    if(ggImage.Source = otoTip.imagex) {
        ggImage.Source = otoTip.imageActivex;
    } 
    else 
    { 
        ggImage.Source = otoTip.imagex;
    }
};

这有帮助吗?