You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP自定义启动画面实现咨询:非仅图片居中需求及示例问题

UWP自定义启动画面(突破默认居中图片限制)

我太懂这种感受了——本来想做个不只是居中图片的UWP启动画面,以为查官方文档和示例就能搞定,结果那个MSDN示例居然是个空架子,完全没实现实际功能,白忙活半天确实挺闹心的。

别慌,其实要实现自定义启动画面(比如非居中布局、添加文字/进度条甚至动画),正确的做法是用扩展启动画面的思路:系统先显示默认的启动画面作为过渡,然后我们在应用启动后加载一个自定义页面模拟启动效果,直到应用初始化完成再切换到主界面。下面是具体步骤:


1. 准备自定义启动画面页面

先创建一个SplashScreenPage,在这个页面里你可以完全自由布局,比如把图片放在左上角、底部加加载提示、添进度环等等:

<Page
    x:Class="YourAppNamespace.SplashScreenPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <!-- 自定义布局示例:图片左对齐,底部加提示和进度环 -->
        <Image Source="Assets/YourCustomSplashImage.png" 
               HorizontalAlignment="Left" 
               VerticalAlignment="Top" 
               Margin="32"/>
        <TextBlock Text="正在初始化应用..." 
                   VerticalAlignment="Bottom" 
                   HorizontalAlignment="Center" 
                   FontSize="18" 
                   Margin="0,0,0,48"/>
        <ProgressRing IsActive="True" 
                      VerticalAlignment="Bottom" 
                      HorizontalAlignment="Center" 
                      Margin="0,0,0,80"/>
    </Grid>
</Page>

2. 在应用启动逻辑中控制切换

打开App.xaml.cs,修改OnLaunched方法,先显示自定义启动画面,等应用初始化完成后再跳转到主页面:

private Frame _rootFrame;
private SplashScreenPage _splashPage;

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    _rootFrame = Window.Current.Content as Frame;

    if (_rootFrame == null)
    {
        _rootFrame = new Frame();
        _rootFrame.NavigationFailed += OnNavigationFailed;

        // 如果应用之前被终止,这里可以恢复状态
        if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
        {
            // 按需添加状态恢复逻辑
        }

        Window.Current.Content = _rootFrame;
    }

    if (!e.PrelaunchActivated)
    {
        if (_rootFrame.Content == null)
        {
            // 加载自定义启动画面
            _splashPage = new SplashScreenPage();
            _rootFrame.Content = _splashPage;

            // 异步执行应用初始化(比如加载数据、初始化服务)
            _ = InitializeAppAsync();
        }
        Window.Current.Activate();
    }
}

private async Task InitializeAppAsync()
{
    // 替换成你的真实初始化逻辑,比如加载本地数据、调用API等
    await Task.Delay(2000); // 示例:模拟2秒加载时间

    // 初始化完成,导航到主页面
    _rootFrame.Navigate(typeof(MainPage));
}

private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
    throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}

关键说明

  • 这种方式完全摆脱了默认启动画面的布局限制,你可以在SplashScreenPage里实现任何你想要的UI效果,包括动画、动态内容等。
  • 那个MSDN示例确实是无效的,不用再纠结它,按上面的方法来是经过验证的可行方案。

内容的提问来源于stack exchange,提问作者Christian Findlay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:55:26