33

I want to apply fade animation every time my window is shown. How to do that from xaml? That window can be hidden and then shown again so I can't use Loaded event.

Poma
  • 8,174
  • 18
  • 82
  • 144
  • Look at this question, may be this will help: http://stackoverflow.com/questions/867656/fading-out-a-wpf-window-on-close – Seekeer Feb 08 '12 at 10:29

2 Answers2

58

You can use the ContentRendered event or override OnContentRendered virtual method like this:

    bool _shown;

    protected override void OnContentRendered(EventArgs e)
    {
        base.OnContentRendered(e);

        if (_shown)
            return;

        _shown = true;

        // Your code here.
    }
ezolotko
  • 1,723
  • 1
  • 21
  • 21
  • 10
    Is it really needed to use _shown variable? Can rendered be called twice or more? –  Jul 26 '17 at 16:01
  • Yes, when your form shown twice or more. Mostly when form is child and needed to show and close again and again with 1 instance. – Gray Programmerz Mar 26 '21 at 13:41
5

You could use the

IsVisibleChanged

Event from the WPF Window;

Then in the EventMethod use:

if((bool)e.IsVisible)
{
   // It became visible
}
else
{
  // It became hidden
}

This works with opening a new Window instance, this.Show(), this.hide(), this.Close()

MiiChiel
  • 201
  • 1
  • 4
  • 14