簡體   English   中英

WPF 用戶控件的加載事件不止一次觸發

[英]Loaded event of a WPF user control fires more than once

要在WPF 中實現基於選項卡的環境,我們需要將表單轉換為用戶控件,但是在執行此操作時,用戶控件的Loaded事件將被調用兩次

在網上搜索時,其他人也指出了這個問題。 我們如何確保加載的事件只被調用一次? 因為當它被多次調用時,我們控件的初始化會發生多次。

正如本博客中所解釋的,當即將呈現控件(即添加到可視樹)時,會觸發Loaded事件。

有幾個控件會導致您的控件多次加載/卸載。 例如,本機WPF TabControl僅呈現所選選項卡的內容。 因此,當您選擇新選項卡時,將卸載先前選定選項卡的內容。 如果單擊返回先前選擇的選項卡,則會重新加載其內容。

一個解決方法是使用布爾值來標記您是否已經按照其他人的建議初始化了控件。 或者,您也許可以使用Initialized事件。

您的路由事件處理程序可以(並且應該)從Loaded鈎子中刪除它自己的第一件事。

public class MyClass : Window
{
    public MyClass()
    {
        Loaded += MyLoadedRoutedEventHandler;
    }

    void MyLoadedRoutedEventHandler(Object sender, RoutedEventArgs e)
    {
        Loaded -= MyLoadedRoutedEventHandler;
        /// ...
    }
};

在事件中設置loaded標志,如果已設置標志,則不執行任何操作。

如上所述,您可以使用 bool 標志。

 bool isPageLoadingForFirstTime = true; public void LoadedEvent() { if(ispageLoadingForFirstTime) { //do something ispageLoadingForFirstTime = false; } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM