UWP如何在用户执行特定操作时显示数秒的简单提示消息
UWP 操作成功自动消失居中提示实现方案
你可以通过以下两种常用方案实现需求,两种都可以完美适配MVVM架构:
方案1:使用系统内置 TeachingTip 控件(推荐,无需自定义样式)
TeachingTip 是WinUI 2原生提供的提示控件,UWP直接支持,自带弹出/消失动画,无需额外自定义样式。
实现步骤
- 在页面/主窗口的根布局(如Grid)中添加控件代码:
<Grid x:Name="RootGrid"> <!-- 其他页面内容 --> <TeachingTip x:Name="SuccessTip" Placement="Center" IsLightDismissEnabled="True" Title="操作成功" Content="任务已成功完成" CornerRadius="4"> </TeachingTip> </Grid>
- 在ViewModel中任务执行完成后,通过MVVM消息通知机制(如MVVM Toolkit的
WeakReferenceMessenger、自定义事件等)发送成功通知。 - 在页面后台代码中接收通知,执行提示显示逻辑:
// 接收成功通知后的执行逻辑 private void ShowSuccessTip() { // 切到UI线程执行 _ = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { SuccessTip.IsOpen = true; // 3秒后自动关闭 var timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(3) }; timer.Tick += (s, e) => { SuccessTip.IsOpen = false; timer.Stop(); }; timer.Start(); }); }
方案2:使用 Popup 自定义轻量提示
如果需要完全自定义提示的样式、动画,可以用Popup实现:
- 在根布局中添加Popup定义:
<Popup x:Name="SuccessPopup" IsLightDismissEnabled="True"> <Border Background="#2D2D2D" CornerRadius="8" Padding="24,16" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Text="任务已成功完成" Foreground="White" FontSize="14"/> </Border> </Popup>
- 显示逻辑和上面一致,只需要把
SuccessTip.IsOpen替换为SuccessPopup.IsOpen即可,同时可以手动调整Popup的HorizontalOffset和VerticalOffset保证完全居中。
注意事项
- 所有UI操作必须在UI线程执行,后台线程执行完任务后要通过
Dispatcher切换到UI线程再操作提示控件 - 提示控件要放在根布局的最末尾,保证层级最高不会被其他控件遮挡
- 自动关闭的时长可根据需求自行调整,常规场景设置2-4秒即可
内容的提问来源于stack exchange,提问作者Nisha
相关产品推荐
相关产品推荐

