我当前正在为事件分配事件处理程序,但是我确实需要传递另一个参数来知道产生此事件的原因。 它具有建立XAML文件的功能。 我做了这样的事情:
chart[i].PaintSurface += (sender, e) => OnCanvasViewPaintSurface(sender, e, i);
但是同一行会引发Null引用异常。
我在网上低头了解原因,在大多数情况下是因为该对象未初始化,但是在这里是。
此处是发生此问题的功能。 数组图表是一个全局变量。
private void CreateUIElements()
{
int MAXCHANNELS = (int)App.UserPrefs[UserPreferenceReference.TotalChannels];
ChannelLabels = new Label[MAXCHANNELS];
Plotlayouts = new AbsoluteLayout[MAXCHANNELS];
for (int i = 0; i < MAXCHANNELS; i++)
{
MainGrid.RowDefinitions.Add(new RowDefinition { Height = 15 });
if (i != MAXCHANNELS - 1)
{
MainGrid.RowDefinitions.Add(new RowDefinition { Height = 75 });
}
else
{
MainGrid.RowDefinitions.Add(new RowDefinition { Height = 100 });
}
ChannelLabels[i] = new Label()
{
Text = "Channel" + (i + 1),
TextColor = Color.Gray
};
MainGrid.Children.Add(ChannelLabels[i], 0, 2 * i);
Plotlayouts[i] = new AbsoluteLayout();
chart[i] = new SKCanvasView
{
BackgroundColor = Color.White,
VerticalOptions = LayoutOptions.FillAndExpand, // stretch the view
HorizontalOptions = LayoutOptions.FillAndExpand, // stretch the view
// WidthRequest = 100, // specify a size
// HeightRequest = 100, // specify a size
};
chart[i].PaintSurface += (sender, e) => OnCanvasViewPaintSurface(sender, e, i);
Plotlayouts[i].Children.Add(chart[i], new Rectangle(0, 0, 1, 1), AbsoluteLayoutFlags.All);
MainGrid.Children.Add(Plotlayouts[i], 0, 2 * i + 1);
}
MainGrid.RowDefinitions.Add(new RowDefinition { Height = 50 });
var buttonLayout = new StackLayout
{
Orientation = StackOrientation.Horizontal,
HorizontalOptions = LayoutOptions.Center
};
MainGrid.Children.Add(buttonLayout, 0, MAXCHANNELS);
}
非常感谢您的帮助。