Search code examples
c#xamlcode-behind

Event loaded in code-behind


I have an expander with a loaded event in xaml, and it works well :

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

But I try in code-behind :

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

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

And it doesn't work.

How can i call expander_Loaded when my expander isLoaded?


Solution

  • When you use

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

    you insert a new Expander into your XAML, i.e. the display knows about it and works with it.

    When you do:

    Expander ex = new Expander();
    ex.Loaded += new RoutedEventHandler(expander_Loaded);
    
    void expander_Loaded(object sender, RoutedEventArgs e)
    {
        //code
    }
    

    you create a new Expander object, assign it an event, and then, if it is not used after that line, promptly discard it. Try

    <Expander Name="exp">
    

    with

    //refers to the declared object
    exp.Loaded += new RoutedEventHandler(expander_Loaded);
    
    void expander_Loaded(object sender, RoutedEventArgs e)
    {
        //code
    }
    

    to see that it will work. Additionally, if you want to create and add controls at runtime, take a look at this question, that explains working with the Children collection