0

我的应用程序中有一个参数化的构造函数。我想将控件动态添加到我的 silverlight 子控件页面。但它给了NullReferenceException. 我不知道为什么它返回 null。有什么可以帮助我解决这种情况吗?

public PDFExport(FrameworkElement graphTile1, FrameworkElement graphTile2,FrameworkElement graphTile3)
{

  Button btnGraph1 = new Button();
  string Name = graphTile1.Name;
  btnGraph1.Content = Name;
  btnGraph1.Width = Name.Length;
  btnGraph1.Height = 25;
  btnGraph1.Click += new RoutedEventHandler(btnGraph1_Click);
  objStack.Children.Add(btnGraph1);
  LayoutRoot.Children.Add(objStack); // Here am getting null Reference Exception


  _graphTile1 = graphTile1;
  _graphTile2 = graphTile2;
  _graphTile3 = graphTile3;
 } 

谢谢。

4

2 回答 2

0

我猜 objStack 是在您的 XAML 中声明的堆栈面板?请注意,您的 xaml 的 UI 组件是通过调用 InitializeComponent 构建的。

因此,除非您在构造函数中调用 InitializeCOmponent(),否则 objStack 将不存在。

此外,您应该知道对 InitializeComponent 的调用是异步的,因此您的代码应该如下所示:

private readonly FrameworkElement _graphTile1;
private readonly FrameworkElement _graphTile2;
private readonly FrameworkElement _graphTile3;

public PDFExport(FrameworkElement graphTile1, FrameworkElement graphTile2, FrameworkElement graphTile3)
{
    _graphTile1 = graphTile1;
    _graphTile2 = graphTile2;
    _graphTile3 = graphTile3;
}

private void PDFExport_OnLoaded(object sender, RoutedEventArgs e)
{
    Button btnGraph1 = new Button();
    string Name = _graphTile1.Name;
    btnGraph1.Content = Name;
    btnGraph1.Width = Name.Length;
    btnGraph1.Height = 25;
    btnGraph1.Click += new RoutedEventHandler(btnGraph1_Click);
    objStack.Children.Add(btnGraph1);
    LayoutRoot.Children.Add(objStack); 
}

希望能帮助到你。

于 2013-02-12T07:57:13.997 回答
0

根据我的研究,我知道为什么会引发异常:因为没有

我的构造函数中的 InitializeComponent() 并且没有调用父构造函数。

这就是它引发异常的原因。

只需将 InitializeComponent() 添加到代码中,简单

于 2013-02-12T07:58:29.723 回答