Snackbar
Snackbar
是屏幕底部默认显示的计时警报。 它会在可配置的持续时间后被消除。 Snackbar
完全可自定义,可以定位到任何 IView
。
Snackbar
通知用户应用已执行或将执行的进程。 它暂时显示在屏幕底部。
要访问 Snackbar
功能,需执行以下特定于平台的设置。
使用 Snackbar
时,必须执行以下两个步骤:
1.使用 MauiAppBuilder 启用 snackbar 使用情况
使用 UseMauiCommunityToolkit
利用 options
参数在 Windows 上启用 snackbar 使用情况,如下所示:
var builder = MauiApp.CreateBuilder()
.UseMauiCommunityToolkit(options =>
{
options.SetShouldEnableSnackbarOnWindows(true);
})
上述操作将通过配置生命周期事件(OnLaunched
和 OnClosed
)来自动注册所需的处理程序。
2.在 Package.appxmanifest 文件中包括 ToastNotification 注册
若要处理 snackbar 操作,需要按如下所示修改 Platform\Windows\Package.appxmanifest
文件:
- 在 Package.appxmanifest 中,在打开的
<Package>
标记中添加以下 XML 命名空间:
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
- 在 Package.appxmanifest 中,在开始
<Package>
标记中,更新 IgnorableNamespaces
以加入 uap
rescap
com
和 desktop
:
IgnorableNamespaces="uap rescap com desktop"
例如:已完成 <Package>
标记
下面是已完成的打开的 <Package>
标记的示例,该标记添加了对 Snackbar
的支持:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap rescap com desktop">
- 在 Package.appxmanifest 中,在每个
<Application>
标记内,添加以下扩展:
<Extensions>
<!-- Specify which CLSID to activate when notification is clicked -->
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation ToastActivatorCLSID="6e919706-2634-4d97-a93c-2213b2acc334" />
</desktop:Extension>
<!-- Register COM CLSID -->
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="YOUR-PATH-TO-EXECUTABLE" DisplayName="$targetnametoken$" Arguments="----AppNotificationActivated:"> <!-- Example path to executable: CommunityToolkit.Maui.Sample\CommunityToolkit.Maui.Sample.exe -->
<com:Class Id="6e919706-2634-4d97-a93c-2213b2acc334" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
例如:已完成 <Applications>
标记
下面是已完成 <Applications>
标记的示例,该标记现在添加了对 Snackbar
的支持:
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="$placeholder$"
Description="$placeholder$"
Square150x150Logo="$placeholder$.png"
Square44x44Logo="$placeholder$.png"
BackgroundColor="transparent">
<uap:DefaultTile Square71x71Logo="$placeholder$.png" Wide310x150Logo="$placeholder$.png" Square310x310Logo="$placeholder$.png" />
<uap:SplashScreen Image="$placeholder$.png" />
</uap:VisualElements>
<Extensions>
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation ToastActivatorCLSID="6e919706-2634-4d97-a93c-2213b2acc334" />
</desktop:Extension>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="YOUR-PATH-TO-EXECUTABLE" DisplayName="$targetnametoken$" Arguments="----AppNotificationActivated:"> <!-- Example path to executable: CommunityToolkit.Maui.Sample\CommunityToolkit.Maui.Sample.exe -->
<com:Class Id="6e919706-2634-4d97-a93c-2213b2acc334" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
</Application>
</Applications>
示例:更新 Package.appxmanifest
的文件以支持 Snackbar
下面是已更新以支持 Windows 上的 Snackbar
的 Package.appxmanifest
文件示例:
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap rescap com desktop">
<Identity Name="maui-package-name-placeholder" Publisher="CN=Microsoft" Version="0.0.0.0" />
<Properties>
<DisplayName>$placeholder$</DisplayName>
<PublisherDisplayName>Microsoft</PublisherDisplayName>
<Logo>$placeholder$.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="$placeholder$"
Description="$placeholder$"
Square150x150Logo="$placeholder$.png"
Square44x44Logo="$placeholder$.png"
BackgroundColor="transparent">
<uap:DefaultTile Square71x71Logo="$placeholder$.png" Wide310x150Logo="$placeholder$.png" Square310x310Logo="$placeholder$.png" />
<uap:SplashScreen Image="$placeholder$.png" />
</uap:VisualElements>
<Extensions>
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation ToastActivatorCLSID="6e919706-2634-4d97-a93c-2213b2acc334" />
</desktop:Extension>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="YOUR-PATH-TO-EXECUTABLE" DisplayName="$targetnametoken$" Arguments="----AppNotificationActivated:"> <!-- Example path to executable: CommunityToolkit.Maui.Sample\CommunityToolkit.Maui.Sample.exe -->
<com:Class Id="6e919706-2634-4d97-a93c-2213b2acc334" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>
有关处理激活的详细信息:从 C# 应用发送本地 toast 通知
语法
使用 C# 调用 Snackbar
。
C#
若要显示 Snackbar
,需要使用静态方法 Make
创建它:
using CommunityToolkit.Maui.Alerts;
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
var snackbarOptions = new SnackbarOptions
{
BackgroundColor = Colors.Red,
TextColor = Colors.Green,
ActionButtonTextColor = Colors.Yellow,
CornerRadius = new CornerRadius(10),
Font = Font.SystemFontOfSize(14),
ActionButtonFont = Font.SystemFontOfSize(14),
CharacterSpacing = 0.5
};
string text = "This is a Snackbar";
string actionButtonText = "Click Here to Dismiss";
Action action = async () => await DisplayAlert("Snackbar ActionButton Tapped", "The user has tapped the Snackbar ActionButton", "OK");
TimeSpan duration = TimeSpan.FromSeconds(3);
var snackbar = Snackbar.Make(text, action, actionButtonText, duration, snackbarOptions);
await snackbar.Show(cancellationTokenSource.Token);
调用 Snackbar.Make()
时,需要其参数 string text
。 其他所有参数都是可选参数。
以下屏幕截图显示了生成的 Snackbar:
还有一个扩展方法,将 Snackbar
定位到任何 VisualElement
:
await MyVisualElement.DisplaySnackbar("Snackbar is awesome. It is anchored to MyVisualElement");
警告
Windows 上的 Snackbar
无法定位到 VisualElement
,并且始终显示为默认 Windows 通知。
SnackBar
包含两个事件:
public static event EventHandler Shown
public static event EventHandler Dismissed
它还包含属性 public static bool IsShown { get; }
。
Snackbar.Shown += (s, e) => { Console.WriteLine(Snackbar.IsShown); };
Snackbar.Dismissed += (s, e) => { Console.WriteLine(Snackbar.IsShown); };
属性
属性 |
类型 |
说明 |
文本 |
string |
短信。 必需 |
操作 |
Action |
单击操作按钮时要调用的操作。 |
ActionButtonText |
string |
操作按钮文本。 |
定位点 |
IView |
Snackbar 定位点。 Snackbar 显示在此视图附近。 null 时,Snackbar 将显示在屏幕底部。 |
持续时间 |
TimeSpan |
Snackbar 持续时间。 |
VisualOptions |
SnackbarOptions |
Snackbar 视觉对象选项。 |
SnackbarOptions
SnackbarOptions
允许自定义默认 Snackbar
样式。
属性
属性 |
类型 |
说明 |
默认值 |
CharacterSpacing |
double |
消息字符间距。 |
0.0d |
字体 |
Font |
消息字体。 |
Font.SystemFontOfSize(14) |
TextColor |
Color |
消息文本颜色。 |
Colors.Black |
ActionButtonFont |
Font |
操作按钮字体。 |
Font.SystemFontOfSize(14) |
ActionButtonTextColor |
Color |
操作按钮文本颜色。 |
Colors.Black |
BackgroundColor |
Color |
背景色。 |
Colors.LightGray |
CornerRadius |
CornerRadius |
圆角半径。 |
new CornerRadius(4, 4, 4, 4) |
方法
方法 |
说明 |
显示 |
显示请求的 Snackbar 。 这将消除当前显示的任何 Snackbar |
取消 |
消除请求的 Snackbar 。 |
注意
只能同时显示 1 个 Snackbar
。 如果第二次调用 Show
方法,则显示第二个 Snackbar
之前,将自动消除第一个 Snackbar
。
示例
可以在 .NET MAUI 社区工具包示例应用程序中找到此功能的示例。
API
可以在 .NET MAUI 社区工具包 GitHub 存储库查看Snackbar
的源代码