WPF에 "All Children loaded" 이벤트가 있습니까?
페이지 로드 이벤트를 듣고 있습니다.그 이벤트는 먼저 발사되고 그 다음에 모든 아이들이 로드 이벤트를 발사합니다.아이들이 다 실었을 때 발사되는 이벤트가 필요합니다.그게 존재합니까?
듣고 있어요.저는 또한 이것에 대한 WPF의 즉시 사용 가능한 솔루션을 놓치고 있습니다.
때때로 모든 하위 컨트롤이 로드된 후에 일부 코드가 실행되기를 원할 수 있습니다.
상위 컨트롤의 생성자에 저장
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => {code that should be executed after all children are loaded} ));
지금까지 몇 번 도와줬어요
Loaded모든 아이들이 일어난 후에 화재가 발생하는 사건입니다.Initialized.거기에는 없다AfterLoad제가 알기로는 사건입니다.할 수 있으면 아이들의 논리를 다음으로 옮깁니다.Initialized이벤트, 그리고Loaded모든 항목이 초기화된 후에 발생합니다.
콘텐츠 렌더링 이벤트도 사용할 수 있습니다.
http://msdn.microsoft.com/en-us/library/ms748948.aspx#Window_Lifetime_Events
대부분의 경우 데이터가 특정 자식을 Visual Tree에 로드할지 여부를 결정하기 때문에 WPF는 이러한 이벤트를 제공할 수 없습니다(예: DataTemplate 내부의 UI 요소).
따라서 시나리오를 좀 더 명확하게 설명해 주시면 이에 대한 구체적인 해결책을 찾을 수 있습니다.
선택사항 중 하나(내용이 렌더링될 때):
이.레이아웃 업데이트됨 += 온레이아웃 업데이트됨;
private void OnLayoutUpdated(object sender, EventArgs e)
{
if (!isInitialized && this.ActualWidth != 0 && this.ActualHeight != 0)
{
isInitialized = true;
// Logic here
}
};
당신의 안에 넣으세요.xaml대기할 구성 요소, 로드 이벤트Loaded="MyControl_Loaded"맘에 들다
<Grid Name="Main" Loaded="Grid_Loaded"...>
<TabControl Loaded="TabControl_Loaded"...>
<MyControl Loaded="MyControl_Loaded"...>
...
그리고 당신의 안에서code
bool isLoaded;
private void MyControl_Loaded(object sender, RoutedEventArgs e)
{
isLoaded = true;
}
그런 다음, 어떤 작업을 수행해야 하지만 모든 구성 요소가 제대로 로드되기 전에 트리거된 이벤트 트리거 내부에 다음과 같이 입력합니다.if(!isLoaded) return;맘에 들다
private void OnButtonChanged(object sender, RoutedEventArgs e)
{
if(!isLoaded) return;
... // code that must execute on trigger BUT after load
}
저는 결국 이 노선들을 따라 무언가를 하게 되었습니다.당신의 마일리지는 다양할 수 있습니다.
void WaitForTheKids(Action OnLoaded)
{
// After your children have been added just wait for the Loaded
// event to fire for all of them, then call the OnLoaded delegate
foreach (ContentControl child in Canvas.Children)
{
child.Tag = OnLoaded; // Called after children have loaded
child.Loaded += new RoutedEventHandler(child_Loaded);
}
}
internal void child_Loaded(object sender, RoutedEventArgs e)
{
var cc = sender as ContentControl;
cc.Loaded -= new RoutedEventHandler(child_Loaded);
foreach (ContentControl ctl in Canvas.Children)
{
if (!ctl.IsLoaded)
{
return;
}
}
((Action)cc.Tag)();
}
언급URL : https://stackoverflow.com/questions/567216/is-there-a-all-children-loaded-event-in-wpf
'codememo' 카테고리의 다른 글
| 매우 큰 테이블에서 정확한 행 수를 계산하는 가장 빠른 방법은 무엇입니까? (0) | 2023.05.03 |
|---|---|
| PostgreSQL에서 보기에 대한 CREATE VIEW 코드를 보는 방법은 무엇입니까? (0) | 2023.05.03 |
| OS X에서 환경 변수 설정 (0) | 2023.05.03 |
| 의 기준 매개 변수와 출력 매개 변수 간의 차이입니다.그물 (0) | 2023.05.03 |
| 설명에서 Enum 특성 가져오기 (0) | 2023.05.03 |