0

My Application にパラメーター化されたコンストラクターがあります。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

私の研究によると、私はそれを理解しました、なぜそれが例外を引き起こすのですか?

My ConstructorのInitializeComponent()であり、親コンストラクターを呼び出していません。

それが例外を発生させる理由です。

コードにInitializeComponent()を追加するだけで、簡単です

于 2013-02-12T07:58:29.723 に答える