0

我在 xaml 中有一个带有加载事件的扩展器,它运行良好:

<Expander Name="exp" Loaded="expander_Loaded">

但我尝试使用代码隐藏:

   Expander ex = new Expander();
   ex.Loaded += new RoutedEventHandler(expander_Loaded);

   void expander_Loaded(object sender, RoutedEventArgs e)
   {
        //code
   }

它不起作用。

当我的扩展器已加载时,我该如何调用expander_Loaded

4

2 回答 2

1

当你使用

<Expander Name="exp" Loaded="expander_Loaded">

您将一个新的扩展器插入您的 XAML,即显示器知道它并使用它。

当你这样做时:

Expander ex = new Expander();
ex.Loaded += new RoutedEventHandler(expander_Loaded);

void expander_Loaded(object sender, RoutedEventArgs e)
{
    //code
}

您创建一个新Expander对象,为其分配一个事件,然后,如果在该行之后没有使用它,则立即丢弃它。尝试

<Expander Name="exp">

//refers to the declared object
exp.Loaded += new RoutedEventHandler(expander_Loaded);

void expander_Loaded(object sender, RoutedEventArgs e)
{
    //code
}

看看它会起作用。此外,如果您想在运行时创建和添加控件,请查看这个问题,它解释了使用Children集合

于 2013-01-14T12:42:45.847 回答
0

您不需要在代码标记中连接事件。删除Loaded="expander_Loaded"或删除ex.Loaded += new RoutedEventHandler(expander_Loaded);。这样做两次可能会产生这种意想不到的效果。

于 2013-01-14T12:38:55.330 回答