2016-11-13 16 views
1

我試圖生成一個分形圖像,並顯示應用程序加載時的圖像。它適用於單擊按鈕和調整窗口大小等事件,但不適用於首次打開應用程序時。如何在UWP應用程序打開時顯示生成的圖像?

的XAML是:

<Viewbox Grid.Row="1" x:Name="Scenario4ImageContainer" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" PointerPressed="Scenario4ImageContainer_PointerPressed"> 
    <Image x:Name="Scenario4Image" /> 
</Viewbox> 

的代碼是:

private async void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     generator.Width = (int)imageColumn.ActualWidth; ; 
     generator.Height = (int)imageRow.ActualHeight; ; 
     generator.InitMap(); 
     generator.Generate(); 

     fractalBitmap = await colorer.Color(generator.Map); 

     Scenario4Image.Source = fractalBitmap; 
     fractalBitmap.Invalidate(); 

     //This works... 
     //Scenario4Image.Source = new BitmapImage(new Uri("ms-appx:///Assets/LockScreenLogo.scale-200.png")); 
    } 
+1

作爲說明,您不需要將圖像控件放在視圖框中。只需適當地設置圖像控件的Stretch屬性即可。除此之外,你是否檢查'imageColumn.ActualWidth'和'imageRow.ActualHeight'是否大於零? – Clemens

+0

我檢查過,寬度和高度肯定大於零。他們是正確的價值觀。 – MichaelG

回答

0

你等待被激活Windows的? 你可以在你的App.xaml.cs文件中使用TaskCompletionSource暴露的方法:

private static TaskCompletionSource _waitActivation =new TaskCompletionSource<bool>(); 

public static Task WaitWindowActivationAsync(){ 
    return _waitActivation.Task; 
} 

private void OnLaunched(...){ 

... 

Windows.Current.Activate(); 

_waitActivation.TrySetResult(true); 

} 

然後在你的處理器,你怎麼稱呼它:

private async void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     await App.WaitWindowActivationAsync(); 
     ... 
    } 

你也可以添加一個等待到任務。產量(); :

private async void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     await Task.Yield(); 
     await App.WaitWindowActivationAsync(); 
     ... 
    } 
+0

我能夠通過添加類型TaskCompletionSource '私有靜態TaskCompletionSource _waitActivation =新TaskCompletionSource ()添加在App.xaml.cs代碼;' 但無法調用它的PAGE_LOADED方法。我無法訪問App變量。也許更新版本的UWP應用程序會有所改變? – MichaelG

+0

嘿,對不起我的代碼中的錯誤:使WaitWindowActivationAsync方法靜態,並從加載的事件處理程序調用它。告訴我它是否有效。 –

相關問題