FluentUI.Blazor v5.rc2
Annonce de Fluent UI Blazor v5 RC2 — Toast, Autocomplete, Thèmes et plus encore
Nous sommes ravis d’annoncer la deuxième Release Candidate de la bibliothèque Fluent UI Blazor v5 ! Depuis la RC1, l’équipe a travaillé intensément sur la branche dev-v5, livrant deux nouveaux composants — FluentAutocomplete et FluentToast — ainsi qu’une puissante API de Thèmes avec un Theme Designer intégré, des améliorations majeures du DataGrid incluant les colonnes épinglées, et des dizaines d’améliorations sur l’ensemble de la bibliothèque.
Visitez notre site de démonstration.
Nouveau composant : FluentAutocomplete
Le composant FluentAutocomplete apporte une expérience d’autocomplétion complète à la v5, remplaçant l’implémentation de la v4 par un composant moderne entièrement réécrit.
Fonctionnalités clés
- Recherche à la saisie — Filtrage dynamique des options au fur et à mesure de la saisie, avec prise en charge intégrée du debounce.
- Sélection multiple — Sélectionnez plusieurs éléments affichés sous forme de badges supprimables dans la zone de saisie.
- Navigation au clavier — Navigation complète avec les touches fléchées, Entrée pour sélectionner, Échap pour fermer, et Retour arrière pour supprimer le dernier élément sélectionné.
- Modèles d’options personnalisés — Utilisez
OptionTemplatepour afficher un contenu riche et personnalisé pour chaque suggestion. - Indicateur de progression — Affichez un indicateur de chargement pendant la récupération asynchrone des résultats.
- MaxAutoHeight / MaxSelectedWidth — Contrôlez la mise en page et le comportement de débordement des éléments sélectionnés.
Utilisation de base
<FluentAutocomplete OnOptionsSearch="@OnSearchAsync"
OptionText="@(item => item.Name)"
OptionDisabled="@(e => e.Code == "au")"
@bind-SelectedItems="@SelectedCountries" />
@code
{
IEnumerable<Country> SelectedCountries { get; set; } = [];
Task OnSearchAsync(OptionsSearchEventArgs<Country> e)
{
e.Items = Countries.Where(i => i.Name.StartsWith(e.Text, StringComparison.OrdinalIgnoreCase))
.OrderBy(i => i.Name);
return Task.CompletedTask;
}
}
Ce composant est une réécriture complète — veuillez consulter la documentation de migration pour les changements par rapport au FluentAutocomplete de la v4.
Nouveau composant : FluentToast & Service Toast
Le nouveau service Toast offre une expérience de notification complète, incluant la prise en charge des toasts avec progression en temps réel.
Types de toast
La bibliothèque prend en charge quatre scénarios de toast via ToastType :
| Type | Description |
|---|---|
| Communication | Notifications et messages généraux |
| Confirmation | Confirmations de succès / échec |
| IndeterminateProgress | Opérations longues sans suivi de progression |
| DeterminateProgress | Opérations avec progression mesurable (ex. téléversement) |
Utilisation simple
@inject IToastService ToastService
// Déclencher et oublier
await ToastService.ShowToastAsync(options =>
{
options.Title = "Fichier sauvegardé",
options.Intent = ToastIntent.Success,
Timeout = 3000,
});
Avancé : instance de toast en temps réel
Pour des scénarios comme les téléversements ou les opérations longues, utilisez ShowToastInstanceAsync pour obtenir une référence en temps réel :
var toast = await ToastService.ShowToastInstanceAsync(options =>
{
options.Title = "Téléversement du document...";
options.Type = ToastType.DeterminateProgress;
});
// Mettre à jour la progression pendant l'affichage
await toast.UpdateAsync(t => t.Progress = 50);
// Terminer et fermer
await toast.UpdateAsync(t => t.Progress = 100);
await toast.CloseAsync();
Points clés du comportement
- File d’attente — Le
FluentToastProvidergère le nombre maximum de toasts visibles, la promotion dans la file d’attente et le positionnement. - Pause au survol — Le délai d’expiration du toast se met en pause lorsque l’utilisateur le survole, ou lorsque la fenêtre du navigateur perd le focus.
- Transitions animées — Animations fluides d’ouverture/fermeture.
- Accessibilité — Les attributs ARIA et les niveaux de politesse sont appliqués en fonction de l’intention du toast.
API de Thèmes & Theme Designer
La version RC2 introduit une API de Thèmes complète qui vous donne un contrôle total sur l’identité visuelle de votre application — d’une simple couleur de marque à un ensemble complet de design tokens personnalisés, avec persistance intégrée et un Theme Designer interactif.
Définir la couleur de marque de manière déclarative
Ajoutez les attributs data-theme et data-theme-color à votre balise <body> :
<body data-theme="light" data-theme-color="#0078D4">
La bibliothèque détecte automatiquement ces attributs, génère une rampe de couleurs et l’applique à l’application.
Définir la couleur de marque par code
Une API complète est disponible via IThemeService :
@inject IThemeService ThemeService
// Définir une couleur de marque personnalisée
await ThemeService.SetThemeAsync("#6B2AEE");
// Passer en mode sombre
await ThemeService.SetDarkThemeAsync();
// Basculer entre clair ↔ sombre
await ThemeService.SwitchThemeAsync();
// Appliquer le thème Teams
await ThemeService.SetTeamsLightThemeAsync();
// Contrôle complet avec les paramètres
await ThemeService.SetThemeAsync(new ThemeSettings
{
Color = "#6B2AEE",
Mode = ThemeMode.Dark,
HueTorsion = 0.1f,
Vibrancy = 0.2f,
});
Theme Designer
Le site de démonstration inclut une page Theme Designer où vous pouvez choisir interactivement une couleur de marque, ajuster la torsion de teinte et la vibrance, prévisualiser la rampe de couleurs générée, et voir votre thème appliqué à de vrais composants en temps réel. Lorsque le résultat vous convient, appliquez-le ou exportez les paramètres.
Fonctionnalités clés
| Fonctionnalité | Description |
|---|---|
| Rampe de couleurs | Génération automatique d’une rampe complète à partir d’une seule couleur hexadécimale |
| Clair / Sombre / Système | Prise en charge des trois modes, avec détection automatique de la préférence système |
| Thèmes Teams | Thèmes Teams Light et Teams Dark intégrés |
| localStorage | Les paramètres de thème sont mis en cache et restaurés automatiquement entre les sessions |
| Thème par élément | Appliquez un thème personnalisé à un ElementReference spécifique sans changer le thème global |
| Support RTL | SwitchDirectionAsync() pour basculer entre LTR et RTL |
Améliorations du DataGrid
Le FluentDataGrid a reçu plusieurs améliorations importantes dans la RC2.
Colonnes épinglées (figées)
Les colonnes peuvent désormais être épinglées au bord gauche ou droit de la grille, afin qu’elles restent visibles lors du défilement horizontal :
<FluentDataGrid Items="@people" Style="overflow-x: auto; max-width: 800px;">
<PropertyColumn Property="@(p => p.Id)" Width="80px" Pin="DataGridColumnPin.Left" />
<PropertyColumn Property="@(p => p.Name)" Width="200px" Pin="DataGridColumnPin.Left" />
<PropertyColumn Property="@(p => p.Email)" Width="300px" />
<PropertyColumn Property="@(p => p.City)" Width="200px" />
<PropertyColumn Property="@(p => p.Country)" Width="200px" />
<PropertyColumn Property="@(p => p.Actions)" Width="100px" Pin="DataGridColumnPin.Right" />
</FluentDataGrid>
Les colonnes épinglées nécessitent une largeur explicite en pixels et doivent être contiguës (toutes les colonnes épinglées à gauche doivent être en premier, toutes celles épinglées à droite en dernier). La grille valide ces règles et lève une exception descriptive en cas de configuration invalide.
HierarchicalSelectColumn
Un nouveau type de colonne qui fournit un comportement de sélection parent-enfant, permettant aux utilisateurs de sélectionner des groupes de lignes liées via une case à cocher hiérarchique.
Autres améliorations du DataGrid
| Fonctionnalité / Correction | PR |
|---|---|
Paramètre StripedRows pour l’alternance des styles de lignes |
#4594 |
Paramètre DisableCellFocus |
#4653 |
Callback d’événement OnSortChanged |
#4572 |
| Ignorer le délai de debounce au premier appel du provider avec virtualisation | #4679 |
| Correction des SelectedItems désélectionnés lors de la pagination/virtualisation | #4624 |
| Correction des problèmes de largeur | #4588 |
Calendrier & DatePicker
- Paramètres
MinDateetMaxDate: vous pouvez désormais restreindre la plage de dates sélectionnables :
<FluentCalendar @bind-Value="@selectedDate"
MinDate="@DateTime.Today"
MaxDate="@DateTime.Today.AddMonths(3)" />
- Vue année : année courante centrée — Le sélecteur d’année place désormais l’année en cours au milieu pour une meilleure ergonomie.
- Correction : navigation mois/année bloquée — Résolution d’un problème où cliquer sur le mois ou l’année pouvait laisser le calendrier dans un état bloqué.
- DatePicker : largeur transmise — Le paramètre
Widthest désormais correctement transmis auFluentTextInputsous-jacent.
Améliorations des composants
| Composant / Zone | Changement | PR |
|---|---|---|
| FluentLink | Prise en charge des liens cliquables avec événements OnClick et styles de survol améliorés |
#4649 |
| Badge | Ajout des classes CSS .fluent-badge pour la personnalisation |
#4597 |
| AppBar | Possibilité de masquer la barre active, rendu de la barre active en mode horizontal | #4581 |
| AppBar | Calcul dynamique de la hauteur de la barre active | #4580 |
| Nav | Amélioration du support de l’accessibilité (a11y) | #4553 |
| Nav | Refactoring et corrections de bugs | #4550 |
| DragContainer/DropZone | Passage de Action à EventCallback pour les gestionnaires d’événements |
#4590 |
| Checkbox | Correction de la logique “checked” pour respecter le paramètre ThreeState |
#4634 |
| Accordion | Correction de l’événement change pour ne se déclencher que pour les éléments fluent-accordion |
#4600 |
| List | Refactoring de OptionSelectedComparer pour utiliser IEqualityComparer |
#4666 |
| Placeholder | Correction d’une erreur de rendu du placeholder | #4618 |
| Événements personnalisés | Renommage des événements personnalisés pour éviter une exception .NET 11 | #4607 |
Localisation
En s’appuyant sur le système de localisation introduit dans la RC1 :
- Chaînes localisables du Paginator (#4672) — Toutes les chaînes du Paginator (libellés de page, boutons de navigation) sont désormais localisables via
IFluentLocalizer. - Référence des paires clé-valeur de traduction (#4660) — La documentation inclut désormais un tableau complet de toutes les clés de traduction par défaut et leurs valeurs, facilitant l’implémentation de
IFluentLocalizer.
Serveur MCP & Outillage
- Service de migration v4 → v5 (#4546) — Un nouveau service de migration et des ressources pour aider à automatiser la transition de la v4 à la v5 via le serveur MCP.
- ModelContextProtocol mis à jour en v1.1.0 (#4604) — Le serveur MCP utilise désormais la dernière version du protocole MCP.
- Documentation des AI Skills et interface de téléchargement (#4528) — Documentation des AI Skills disponibles dans la bibliothèque, avec une interface de téléchargement.
- Outils de compatibilité de version (#4527) — Nouveaux outils et documentation pour vérifier la compatibilité des versions entre les packages FluentUI Blazor.
Essayez-le maintenant
| Ressource | Lien |
|---|---|
| NuGet | Microsoft.FluentUI.AspNetCore.Components --prerelease |
| Documentation | https://fluentui-blazor-v5.azurewebsites.net |
| GitHub | https://github.com/microsoft/fluentui-blazor |
| Guide de migration | Migration vers la v5 |
Il s’agit encore d’une Release Candidate — la surface d’API est stabilisée, mais nous continuons à compter sur la communauté pour nous aider à identifier les problèmes restants avant la version finale. N’hésitez pas à signaler des issues sur GitHub et à contribuer.
Nous travaillons encore sur les éléments restants pour la version finale : dev-v5 - Liste TODO
Merci à tous ceux qui ont contribué, testé et fourni des retours. Un grand bravo aux contributeurs de la communauté qui ont apporté des contributions significatives à cette version !
Happy Blazoring !

