【问题标题】:Double Loaded event in WPFWPF 中的双重加载事件
【发布时间】:2010-05-10 07:10:19
【问题描述】:

我在将数据绑定到其他人制作的自定义控件的值时遇到了一些困难,所以我在此期间使用“Loaded”事件来分配控件的值,但我注意到这个事件被触发了两次。

如何找出触发该事件的原因? (VS2008)或者可能会出现任何解决方案:)

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    每次您的控件可见时,您的 Loaded 事件都会触发(基本上)两次以上。例如,每次切换到其选项卡时,选项卡控件上的控件都会触发其 Loaded 事件。

    这是一个简单的解决方案:

    bool m_Loaded = false;
    void Loaded(object sender, RoutedEventArgs args)
    {
        bool tmpLoaded = m_Loaded;
        m_Loaded = true;
        if (tmpLoaded ) return;
    
        // your code here...
    }
    

    祝你好运//杰瑞

    【讨论】:

      【解决方案2】:

      Jerry 的回答是每次控件变为可见时都会触发 Loaded 事件的问题的常见转变。

      但我更喜欢一种无需持续评估繁琐标志的解决方案:只需在第一次触发事件时从 de 事件中减去处理程序。

      此外,通过这种方式,当控件在第一次之后变为可见时,您可以附加另一个处理程序来执行代码。

          public UserControl1()
          {
              InitializeComponent();
              Loaded += new RoutedEventHandler(UserControl1FirstTime_Loaded);
      
          }
      
          void UserControl1FirstTime_Loaded(object sender, RoutedEventArgs e)
          {
              Loaded -= UserControl1FirstTime_Loaded; //This handler not called again
              ...................
              //Add next line if you want code to be executed when de control becomes visible 
              //after first time.
              Loaded +=UserControl1AfterFirstTimes_Loaded;
          }
      
          void UserControl1AfterFirstTime_Loaded(object sender, RoutedEventArgs e)
          {
              //Code to be executed when the control becomes visible after first time
              ....
          }
      

      【讨论】:

        【解决方案3】:

        正如blog 中所解释的,当即将呈现控件(即添加到可视化树)时会触发 Loaded 事件。

        有几个控件会导致您的控件被多次加载/卸载。例如,原生 WPF TabControl 仅呈现所选选项卡的内容。因此,当您选择新选项卡时,会卸载先前选择的选项卡的内容。如果您单击返回到先前选择的选项卡,则会重新加载其内容。

        【讨论】:

          猜你喜欢
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 2010-10-18
          • 1970-01-01
          • 2019-02-09
          • 2021-04-21
          相关资源
          最近更新 更多