2013-01-01 6 views
1

컨트롤을 추가/제거하여 페이지를 약간 변경하고 레이아웃이 정해 졌을 때만 (레이아웃 된 모든 요소 등) 코드를 계속 사용하고자합니다.XAML 레이아웃이 완료 될 때까지 기다림

어떻게하면됩니까? 레이아웃이 완료되면 내가 할 수있는 작업이 있습니까?

(현재 사용 수율 및 기타 트릭,하지만 그들은 모두 나를 더러운 느낌)

+0

이 도움이 될 수 있습니다 http://stackoverflow.com/a/3684356/276994 – Vlad

답변

3

당신은 TaskCompletionSource<T>를 사용하여 모든 이벤트 주위에 Task을 구축 할 수 있습니다.

귀하의 경우에는 UIElement.LayoutUpdated이 원하는 이벤트 일 수 있습니다 (WPF 레이아웃 세부 정보가 내 장점이 아님).

public static Task LayoutUpdatedAsync(this UIElement element) 
{ 
    var tcs = new TaskCompletionSource<object>(); 
    EventHandler handler = (s, e) => 
    { 
    element.LayoutUpdated -= handler; 
    tcs.SetCompleted(null); 
    }; 
    element.LayoutUpdated += handler; 
    return tcs.Task; 
} 

는 그런 다음 await에 해당 이벤트의 다음 인스턴스를이 방법을 사용할 수 있습니다 : 여기

은 예입니다

await myUiElement.LayoutUpdatedAsync(); 
+1

LayoutUpdated가 충분하지 않은 것 같습니다. 여러 번 실행될 수 있습니다.하지만 고마워요. –

+0

참고로 저는 [UWP 질문] (https://stackoverflow.com/questions/47776473/how-to-create-variable-number-of-richtextboxoverflow-elements/47803012#47803012)과 거의 동일한 솔루션을 제안했습니다. 그러나 그 경우 사건을 기다리는 것만으로는 효과가 없었습니다. 나는 또한 강제로 UI 더미를 펌핑 할 수있는 더미를 삽입해야했다. –

관련 문제