WPF: What is between the Initialized and Loaded event?

前端 未结 3 763
悲哀的现实
悲哀的现实 2021-02-02 11:30

I want to run some code when the Window or Control is first displayed. I can\'t use Loaded because that can fire more than once. I can\'t use Initialized because that is done by

相关标签:
3条回答
  • 2021-02-02 11:49

    Alternatively to storing a boolean flag, you can use an extension method and delegate wrapping to fake Loaded only firing once.

    public static void OnLoadedOnce(
        this UserControl control,
        RoutedEventHandler onLoaded)
    {
        if (control == null || onLoaded == null)
        {
            throw new ArgumentNullException();
        }
    
        RoutedEventHandler wrappedOnLoaded = null;
        wrappedOnLoaded = delegate(object sender, RoutedEventArgs e)
        {
            control.Loaded -= wrappedOnLoaded;
            onLoaded(sender, e);
        };
        control.Loaded += wrappedOnLoaded;
    }
    
    ...
    
    class MyControl : UserControl
    {
        public MyControl()
        { 
            InitializeComponent();
            this.OnLoadedOnce(this.OnControlLoaded /* or delegate {...} */);
        }
    
        private void OnControlLoaded(object sender, RoutedEventArgs e)
        {
        }
    }
    
    0 讨论(0)
  • 2021-02-02 11:52

    If you don't want to use the boolean method of doing things, then you can create a method and subscribe to the Loaded event with it, then unsubscribe at the end of that method.

    Example:

    public MyDependencyObject(){
      Loaded += OnLoaded;
    }
    
    private void OnLoaded(object sender, EventArgs args){
      DoThings();
      Loaded -= OnLoaded;
    }
    
    0 讨论(0)
  • 2021-02-02 11:57

    Unfortunately there is no such event. You can use a boolean in the Loaded Method to make sure your stuff only fires once -

    if(!IsSetUp)
    {
       MySetUpFunction();
       IsSetUp = true;
    }
    

    Check out the WPF Windows lifetime events here:

    http://msdn.microsoft.com/en-us/library/ms748948.aspx#Window_Lifetime_Events


    (source: microsoft.com)

    0 讨论(0)
提交回复
热议问题