2017-01-09 31 views
1

我使用以下XAMLC#代码为Windows 10 UWP应用程序创建了一个扩展启动屏幕。Windows 10 UWP中的扩展启动画面?

XAML代码

<Grid Background="#036E55"> 
    <Canvas> 
     <Image x:Name="extendedSplashImage" Source="Assets/620.scale-200.png"/> 
    </Canvas> 

    <ProgressRing Name="splashProgressRing" 
        IsActive="True" 
        Width="20" 
        Height="20" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Bottom" 
        Foreground="White" 
        Margin="20"> 
    </ProgressRing> 
</Grid> 

C#代码

internal Rect splashImageRect; 
    private SplashScreen splash; 
    internal bool dismissed = true; 
    internal Frame rootFrame; 
    private double ScaleFactor; 
    ApplicationDataContainer userSettings = ApplicationData.Current.LocalSettings; 
    JsonDataHandler dataHandler; 
    //bool isZipUpdateInProgress = false; 

    public ExtendedSplashScreen(SplashScreen splashscreen, bool loadState) 
    { 
     this.InitializeComponent(); 
     Window.Current.SizeChanged += new WindowSizeChangedEventHandler(ExtendedSplash_OnResize); 
     ScaleFactor = (double)DisplayInformation.GetForCurrentView().ResolutionScale/100; 
     //System.Diagnostics.Debug.WriteLine("ScaleFactor - " + ScaleFactor + "/n"); 
     splash = splashscreen; 
     if (splash != null) 
     { 
      splash.Dismissed += new TypedEventHandler<SplashScreen, Object>(DismissedEventHandler); 

      splashImageRect = splash.ImageLocation; 
      PositionImage(); 
      //PositionRing(); 
     } 
     rootFrame = new Frame(); 
    } 

    void PositionImage() 
    { 
     extendedSplashImage.SetValue(Canvas.LeftProperty, splashImageRect.X); 
     extendedSplashImage.SetValue(Canvas.TopProperty, splashImageRect.Y); 
     extendedSplashImage.Height = splashImageRect.Height/ScaleFactor; 
     extendedSplashImage.Width = splashImageRect.Width/ScaleFactor; 

    } 


    void PositionRing() 
    { 
     splashProgressRing.SetValue(Canvas.LeftProperty, splashImageRect.X + (splashImageRect.Width * 0.5) - (splashProgressRing.Width * 0.5)); 
     splashProgressRing.SetValue(Canvas.TopProperty, (splashImageRect.Y + splashImageRect.Height + splashImageRect.Height * 0.1)); 
    } 

void ExtendedSplash_OnResize(Object sender, WindowSizeChangedEventArgs e) 
    { 
     // Safely update the extended splash screen image coordinates. This function will be executed when a user resizes the window. 
     if (splash != null) 
     { 
      // Update the coordinates of the splash screen image. 
      splashImageRect = splash.ImageLocation; 
      PositionImage(); 

      // If applicable, include a method for positioning a progress control. 
      PositionRing(); 
     } 
    } 

现在,它工作正常,如果我继续旋转模式上,但是当我将其关闭,如果我旋转屏幕为横向模式那么标志不同。我正在使用620x300图片。

回答

3

您可以使用此代码尝试它可以帮助你得到结果,只要你想,首先删除所有定位图像的代码只有用这种

<Grid Background="#036E55"> 
     <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <Image Source="Assets/620.scale-200.png" Stretch="None"/> 
      <ProgressRing IsActive="True" Height="30" Width="30" Margin="0,10,0,0" Foreground="White"/> 
     </StackPanel> 
</Grid> 

图像尝试ProgressRing将StackPanel的在屏幕中心管理并且图像也不会有区别。希望它能帮助你。

+0

此功能是否适用于这两种模式以及移动和桌面应用程序? –

+0

是的,它会支持通用的应用程序。您可以更改图像和ProgressRing的大小,具体取决于手机应用程序和桌面/平板电脑应用程序的大小。 但是你不需要改变它会自动管理的魔药。 – jigar

+0

这不按预期工作。图像显示非常大。 –