2

我正在尝试创建一个(的Expander)新实例并将其放入 aStackPanel每次一个变量不等于另一个变量时。

问题; 但是,似乎我无法访问 if 函数之外的变量。我得到:

“错误名称'expand'在当前上下文中不存在”

如果我在函数外部声明新实例,则应用程序将按预期运行一次 if 语句。第二次运行 if 语句时出现错误:

“指定的视觉对象已经是另一个视觉对象的子对象或 CompositionTarget 的根。”

 if (lastStatement != first.ToString())   {

     i++;
     Expander expand = new Expander();

     expand.Name = "expander" + i.ToString();   

     stackpanel1.Children.Add(expand); //This where the error is
 } expand.Content += ones; // I need to place this here for the code to work

这是我得到的情况:

“错误名称'expand'在当前上下文中不存在”

第二次尝试(当我在语句之外创建实例时)我得到:

“指定的视觉对象已经是另一个视觉对象的子对象或 CompositionTarget 的根。”

4

1 回答 1

3

声明变量和创建新实例可以在不同的步骤中完成。您可以简单地在您的if-block 外部声明它并在内部实例化它,但是,您仍然需要在尝试使用它之前将其设置为有效值,否则您将获得一个NullReferenceException.

像这样的东西:

Expander expand;

if (lastStatement != first.ToString())
{
    i++;
    expand = new Expander();
    expand.Name = "expander" + i.ToString();   
    stackpanel1.Children.Add(expand);
} 
else
{
    expand = ... // set expand to some other instance of expander
}

expand.Content += ones;

但是,看起来您正在使用某种循环。在这种情况下,您可能会尝试仅Expander在某些条件下创建新的,但在其他情况下重用以前的Expander。在这种情况下,您还需要在循环块之外声明变量。

像这样的东西:

Expander expand = null;

foreach(...)
{
    if (lastStatement != first.ToString())
    {
        i++;
        expand = new Expander();
        expand.Name = "expander" + i.ToString();
        stackpanel1.Children.Add(expand);
    } 

    expand.Content += ones;
}
于 2013-04-27T03:11:57.813 回答