2015-04-15 30 views
0

在winRT應用程序中,點擊按鈕會在頁面上呈現多個控件。點擊另一個按鈕將保存這些控件的內容。Xaml/Win RT - 等待控件完全呈現

爲了保存控件的內容,我的代碼迭代了頁面的控件集合。

我遇到的問題是碰巧用戶點擊保存按鈕,而所有的控件還沒有完成渲染。

我的問題很簡單:如何在啓用保存按鈕之前等待渲染完成?

Private Async Sub LoadControls() 
'create controls ... 
'add controls to a hub section ... 
'add section to a hub, myHub is defined in Xaml 
myHub.Sections.Add(myHubSection) 
End Sub 

Private Async Sub ReadControls() 
For Each hubSection in MyHub 
'... 
'not all controls are available here, because they are not yet rendered 
Next 
End Sub 

Private Async Sub LoadButton(sender as object, e as RoutedEventArgs) Handles LoadButton.Click 
Await LoadControls() 
End Sub 

Private Async Sub SaveButton(sender as object, e as RoutedEventArgs) Handles LoadButton.Click 
Await ReadControls() 
End Sub 

我已經嘗試了很多使用Dispatcher和東西的解決方案,但都沒有工作。 有沒有簡單的解決方案? 謝謝

+0

該代碼編譯時是否沒有警告或錯誤? –

+0

@PauloMorgado上面的代碼僅用於說明整個過程,實際代碼沒有興趣(對我來說)。想象一下,我在運行時將40個控件添加到集線器,這需要5秒的時間來呈現。如果我在5秒前運行'readcontrols'函數(這可能是因爲渲染是異步的),我沒有得到40個控件,但只有一個子集。我需要一些說'渲染完成'的事件。你怎麼看 ? – jhfelectric

+0

您應該發佈一個可編譯的工作示例。 –

回答

0

這樣做的最好方法,我想,應該是等待分派器線程閒置。如果在控制圖像渲染,你將不得不解析的VisualTree,找到每個映像,並等待它們被渲染(使用ImageOpened事件):

對不起,我的C#:)

// Do "nothing" when the dispacher is idle 
    await Dispatcher.RunAsync(CoreDispatcherPriority.Idle,() => { });