WPF 사용자 제어의 로드된 이벤트가 두 번 이상 발생함
WPF에서 탭 기반 환경을 구현하려면 양식을 사용자 컨트롤로 변환해야 하지만, 이 작업을 수행할 때는Loaded사용자 컨트롤의 이벤트를 두 번 호출합니다.
인터넷에서 검색하는 동안 다른 사람들도 이 문제를 지적했습니다.로드된 이벤트가 한 번만 호출되도록 하려면 어떻게 해야 합니까?여러 번 호출되면 제어 장치의 초기화가 여러 번 발생하기 때문입니다.
이 블로그에서 설명한 것처럼 로드된 이벤트는 컨트롤이 렌더링될 때마다(즉, 시각적 트리에 추가될 때) 실행됩니다.
컨트롤을 여러 번 로드/언로드할 수 있는 여러 컨트롤이 있습니다.예를 들어 기본 WPF 탭 컨트롤은 선택한 탭의 내용만 렌더링합니다.따라서 새 탭을 선택하면 이전에 선택한 탭의 내용이 언로드됩니다.이전에 선택한 탭을 다시 클릭하면 내용이 다시 로드됩니다.
한 가지 해결 방법은 부울을 사용하여 다른 사용자가 제안한 대로 컨트롤을 이미 초기화했는지 여부를 표시하는 것입니다.대신 초기화 이벤트를 사용할 수도 있습니다.
라우팅된 이벤트 처리기는 자신을 제거할 수 있으며 제거해야 합니다.Loaded훅을 제일 먼저 하는 것처럼.
public class MyClass : Window
{
public MyClass()
{
Loaded += MyLoadedRoutedEventHandler;
}
void MyLoadedRoutedEventHandler(Object sender, RoutedEventArgs e)
{
Loaded -= MyLoadedRoutedEventHandler;
/// ...
}
};
set aloaded이벤트에서 플래그를 지정하고 플래그가 이미 설정된 경우에는 아무것도 수행하지 마십시오.
위에서 언급한 것처럼, 당신은 그것에 bool flag를 사용할 수 있습니다.
bool isPageLoadingForFirstTime = true;
public void LoadedEvent()
{
if(ispageLoadingForFirstTime)
{
//do something
ispageLoadingForFirstTime = false;
}
}
언급URL : https://stackoverflow.com/questions/3421303/loaded-event-of-a-wpf-user-control-fires-more-than-once
'source' 카테고리의 다른 글
| #만약 스위프트 언어로 대체한다면, (0) | 2023.04.27 |
|---|---|
| 마이크로소프트.사무실. 인터럽트.Excel 참조를 찾을 수 없습니다. (0) | 2023.04.27 |
| c#에서 술어란 무엇입니까? (0) | 2023.04.27 |
| 그리드 변경 방법.행 및 그리드.wpf에서 코드 뒤에 있는 컨트롤의 열 (0) | 2023.04.27 |
| NgModule.schema에 CUSTOM_ELELENTS_SCHEMA가 추가되었지만 여전히 오류가 표시됨 (0) | 2023.04.27 |