【问题标题】:Xamarin Add Image to StackLayout OnChangeXamarin 将图像添加到 StackLayout OnChange
【发布时间】:2019-11-24 21:43:48
【问题描述】:

我有问题。我有一个 TabbedPage,带有 page1 和 page2。在 page2 上是一个带有一些图像的网格。当我单击图像时,我将图像添加到集合中,因此我在 page1 上使用了 OnChange。 在 page1 上,我想将新的图像添加到该页面上的 StackLayout。

到目前为止,这是我的代码: 这是page2代码:

private void LoadTemplateList()
{
    string[] imageArray = { "Good_Question.png", "Excuse_Me.png"};
    int imageIndex = 0;
    for (var i = 0; i <= TemplateGrid.RowDefinitions.Count; i++)
    {
        if (i == 2)
        {
            for (var j = 0; j < TemplateGrid.ColumnDefinitions.Count; j++)
            {
                if (j == 1 || j == 3)
                {
                    Image image = new Image { Source = imageArray[imageIndex], VerticalOptions = LayoutOptions.StartAndExpand };

                    var SelectImage = new TapGestureRecognizer();
                    SelectImage.Tapped += AddImageToCollection(image);
                    image.GestureRecognizers.Add(SelectImage);

                    TemplateGrid.Children.Add(image,j,i);
                    imageIndex++;
                }
            }
        }
    }
}

private EventHandler AddImageToCollection(Image image)
{
    HomePage.SelectedImageCollection.Add(image);
    return null;
}

但是当我单击图像时 GestureRecognizer 似乎不起作用...

我做错了什么?

【问题讨论】:

  • ObservableCollection 有一个Add 方法,你试过了吗?它还有一个构造函数,允许用另一个 ObservableCollection 的内容初始化它的内容
  • 是的,我可能知道如何制作我想要的东西,但是错误呢
  • 将签名改为:private void AddImageToCollection(Image image)

标签: c# xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

我认为您希望在 page1 中收到有关添加新图片的通知。

如果是这种情况,您必须将事件处理程序添加到 HomePage.SelectedImageCollection.CollectionChanged,所以:

public MemeBuilder()
{
   InitializeComponent();

   SizeChanged += (s, a) =>
   {
       myLayout.HeightRequest = this.Width;
       myLayout.WidthRequest = this.Width;
   };

   HomePage.SelectedImageCollection.CollectionChanged += AddImageToPreview;
}

private void AddImageToPreview(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
           if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
           {
               var image = (Image)e.NewItems[e.NewItems.Count - 1];
           }
   ....
}

【讨论】:

  • 我在我的问题中扩展了我的 page2 代码,因为 GestureRecognizer 似乎无法正常工作,因为它从来没有遇到过AddImageToPreview()...。有什么想法吗?
  • SelectImage.Tapped 需要一个事件处理程序,其签名为 ``` public void NameOfMethod(object sender, EventArgs e) . In this case you could use SelectImage.Command = new Command( (image) => AddImageToCollection (image)) ``` 并更改 ``` private void AddImageToCollection(Image image) ```
  • "不能在此范围内声明名为 'image' 的本地或参数,因为该名称在封闭的本地范围中用于定义本地或参数" ?
  • page1 的这一行中的图像为空:var image = (Image)e.NewItems[e.NewItems.Count - 1];,因为在那一行之后我有这个:myLayout.Children.Add(image);,但这给出了图像为空的错误
  • SelectImage.Command = new Command((i) => AddImageToCollection(i)); SelectImage.CommandParameter = 图像;我忘了告诉你关于 CommandParameter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多