2017-01-09 6 views
1

Я создал расширенный заставку для приложения Windows 10 UWP, используя следующие XAML и C# Код.Расширенная заставка в 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

Это не работает должным образом. Дисплей изображения очень большой по размеру. –