C# Xamarin将图像添加到StackLayout OnChange
我有个问题。我有一个标签页,有第1页和第2页。第2页是一个网格,其中有一些图像。单击图像时,我将图像添加到集合中,因此在第1页上使用OnChange。 在第1页,我想将新图像添加到该页的StackLayout中 以下是我目前的代码: 这是第2页代码:C# Xamarin将图像添加到StackLayout OnChange,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我有一个标签页,有第1页和第2页。第2页是一个网格,其中有一些图像。单击图像时,我将图像添加到集合中,因此在第1页上使用OnChange。 在第1页,我想将新图像添加到该页的StackLayout中 以下是我目前的代码: 这是第2页代码: private void LoadTemplateList() { string[] imageArray = { "Good_Question.png", "Excuse_Me.png"}; int imageIndex = 0;
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;
}
private void LoadTemplateList()
{
string[]imageArray={“Good_Question.png”,“请问.png”};
int-imageIndex=0;
对于(var i=0;i我认为您希望在第1页收到关于添加新图像的通知
如果是这种情况,则必须向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];
}
....
}
observedcollection
有一个Add
方法,你试过了吗?它还有一个构造函数,允许用另一个observedcollection的内容初始化它的内容
是的,我可能知道如何实现我想要的,但是如果出现错误,请将签名更改为:private void AddImageToCollection(Image Image)
我在问题中扩展了第2页的代码,因为手势识别器似乎不工作,因为它从未点击AddImageToPreview()
…有什么想法吗?SelectImage.Tapped需要一个签名为“`` public void NameOfMethod”(对象发送方,EventArgs e)的事件处理程序。在这种情况下,您可以使用
SelectImage.Command=new命令((image)=>AddImageToCollection(image))``并更改``private void AddImageToCollection(image image)````无法在此作用域中声明名为“image”的局部或参数,因为该名称在封闭的局部作用域中用于定义局部或参数“?在第1页的这一行中,图像为空:var image=(image)e.NewItems[e.NewItems.Count-1];
,因为在这一行之后,我有以下内容:myLayout.Children.Add(image);
,但这会导致图像为空的错误,即图像为空SelectImage.Command=new命令((I)=>AddImageToCollection(I));SelectImage.CommandParameter=image;我忘了告诉您CommandParameter