在代码隐藏中加载事件

时间:2013-01-14 12:36:02

标签: c# xaml code-behind

我在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

2 个答案:

答案 0 :(得分: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
}

看它会起作用。此外,如果您想在运行时创建和添加控件,请查看this question,其中说明使用Children集合

答案 1 :(得分:0)

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