diff --git a/Wino.Mail.WinUI/Controls/Calendar/CalendarItemCommandBarFlyout.cs b/Wino.Mail.WinUI/Controls/Calendar/CalendarItemCommandBarFlyout.cs index bf605773..1b96be31 100644 --- a/Wino.Mail.WinUI/Controls/Calendar/CalendarItemCommandBarFlyout.cs +++ b/Wino.Mail.WinUI/Controls/Calendar/CalendarItemCommandBarFlyout.cs @@ -60,7 +60,7 @@ public partial class CalendarItemCommandBarFlyout : CommandBarFlyout if (menuItem.HasChildren) { - var flyout = new MenuFlyout(); + var flyout = new WinoMenuFlyout(); PopulateMenuFlyoutItems(flyout.Items, menuItem.Children); button.Flyout = flyout; } diff --git a/Wino.Mail.WinUI/Controls/MenuFlyoutLanguageHelper.cs b/Wino.Mail.WinUI/Controls/MenuFlyoutLanguageHelper.cs new file mode 100644 index 00000000..2d72b7e2 --- /dev/null +++ b/Wino.Mail.WinUI/Controls/MenuFlyoutLanguageHelper.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.UI.Xaml.Controls; +using Wino.Core.Domain.Enums; +using Wino.Core.Domain.Interfaces; + +namespace Wino.Mail.WinUI.Controls; + +internal static class MenuFlyoutLanguageHelper +{ + private const string ChineseLanguageTag = "zh-CN"; + + public static void Apply(MenuFlyoutItemBase item) + { + if (WinoApplication.Current.Services.GetRequiredService().CurrentLanguage == AppLanguage.Chinese) + { + item.Language = ChineseLanguageTag; + } + else + { + item.ClearValue(MenuFlyoutItemBase.LanguageProperty); + } + } +} diff --git a/Wino.Mail.WinUI/Controls/WinoMenuFlyout.cs b/Wino.Mail.WinUI/Controls/WinoMenuFlyout.cs new file mode 100644 index 00000000..a6946b3f --- /dev/null +++ b/Wino.Mail.WinUI/Controls/WinoMenuFlyout.cs @@ -0,0 +1,32 @@ +using Microsoft.UI.Xaml.Controls; + +namespace Wino.Mail.WinUI.Controls; + +public partial class WinoMenuFlyout : MenuFlyout +{ + public WinoMenuFlyout() + { + Opening += OnOpening; + } + + private void OnOpening(object? sender, object e) + { + foreach (var item in Items) + { + ApplyLanguage(item); + } + } + + private static void ApplyLanguage(MenuFlyoutItemBase item) + { + MenuFlyoutLanguageHelper.Apply(item); + + if (item is MenuFlyoutSubItem subItem) + { + foreach (var childItem in subItem.Items) + { + ApplyLanguage(childItem); + } + } + } +} diff --git a/Wino.Mail.WinUI/MenuFlyouts/AccountSelectorFlyout.cs b/Wino.Mail.WinUI/MenuFlyouts/AccountSelectorFlyout.cs index 860a415f..de4b4abc 100644 --- a/Wino.Mail.WinUI/MenuFlyouts/AccountSelectorFlyout.cs +++ b/Wino.Mail.WinUI/MenuFlyouts/AccountSelectorFlyout.cs @@ -9,7 +9,7 @@ using Wino.Helpers; namespace Wino.MenuFlyouts; -public partial class AccountSelectorFlyout : MenuFlyout, IDisposable +public partial class AccountSelectorFlyout : WinoMenuFlyout, IDisposable { private readonly IEnumerable _accounts; private readonly Func _onItemSelection; diff --git a/Wino.Mail.WinUI/MenuFlyouts/FilterMenuFlyout.cs b/Wino.Mail.WinUI/MenuFlyouts/FilterMenuFlyout.cs index 84a67736..67511013 100644 --- a/Wino.Mail.WinUI/MenuFlyouts/FilterMenuFlyout.cs +++ b/Wino.Mail.WinUI/MenuFlyouts/FilterMenuFlyout.cs @@ -9,7 +9,7 @@ using Wino.Helpers; namespace Wino.MenuFlyouts; -public partial class FilterMenuFlyout : MenuFlyout +public partial class FilterMenuFlyout : WinoMenuFlyout { public static readonly DependencyProperty SelectedFilterChangedCommandProperty = DependencyProperty.Register(nameof(SelectedFilterChangedCommand), typeof(IRelayCommand), typeof(FilterMenuFlyout), new PropertyMetadata(null)); public static readonly DependencyProperty FilterOptionsProperty = DependencyProperty.Register(nameof(FilterOptions), typeof(List), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged))); diff --git a/Wino.Mail.WinUI/MenuFlyouts/MailOperationFlyout.cs b/Wino.Mail.WinUI/MenuFlyouts/MailOperationFlyout.cs deleted file mode 100644 index df15333b..00000000 --- a/Wino.Mail.WinUI/MenuFlyouts/MailOperationFlyout.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.UI.Xaml.Controls; -using Wino.Core.Domain.Enums; -using Wino.Core.Domain.Models.Menus; - -namespace Wino.MenuFlyouts.Context; - -public partial class MailOperationFlyout : WinoOperationFlyout -{ - public MailOperationFlyout(IEnumerable availableActions, TaskCompletionSource completionSource) : base(availableActions, completionSource) - { - if (AvailableActions == null) return; - - foreach (var action in AvailableActions) - { - if (action.Operation == MailOperation.Seperator) - Items.Add(new MenuFlyoutSeparator()); - else - { - var menuFlyoutItem = new MailOperationMenuFlyoutItem(action, (c) => MenuItemClicked(c)); - - Items.Add(menuFlyoutItem); - } - } - } -} diff --git a/Wino.Mail.WinUI/MenuFlyouts/MoveButtonFlyout.cs b/Wino.Mail.WinUI/MenuFlyouts/MoveButtonFlyout.cs index 83e8ca53..5b81eb01 100644 --- a/Wino.Mail.WinUI/MenuFlyouts/MoveButtonFlyout.cs +++ b/Wino.Mail.WinUI/MenuFlyouts/MoveButtonFlyout.cs @@ -5,6 +5,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Windows.Foundation; using Wino.Core.Domain.Entities.Mail; +using Wino.Mail.WinUI.Controls; namespace Wino.MenuFlyouts; @@ -13,7 +14,7 @@ public class MoveButtonMenuItemClickedEventArgs public Guid ClickedFolderId { get; set; } } -public partial class MoveButtonFlyout : MenuFlyout +public partial class MoveButtonFlyout : WinoMenuFlyout { public event TypedEventHandler MenuItemClick = delegate { }; public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged))); @@ -30,8 +31,6 @@ public partial class MoveButtonFlyout : MenuFlyout { menu.InitializeMenu(); } - - } private void InitializeMenu() diff --git a/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyout.cs b/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyout.cs index 25df49a7..bf672f6c 100644 --- a/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyout.cs +++ b/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyout.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.UI.Xaml.Controls; +using Wino.Mail.WinUI.Controls; namespace Wino.MenuFlyouts; -public partial class WinoOperationFlyout : MenuFlyout, IDisposable where TActionType : class +public partial class WinoOperationFlyout : WinoMenuFlyout, IDisposable where TActionType : class { public TActionType ClickedOperation { get; set; } = null!; diff --git a/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyoutItem.cs b/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyoutItem.cs index fa85dbbc..a823b520 100644 --- a/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyoutItem.cs +++ b/Wino.Mail.WinUI/MenuFlyouts/WinoOperationFlyoutItem.cs @@ -3,8 +3,8 @@ using Microsoft.UI.Xaml.Controls; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.Menus; -using Wino.Mail.WinUI.Controls; using Wino.Helpers; +using Wino.Mail.WinUI.Controls; namespace Wino.MenuFlyouts; @@ -18,6 +18,8 @@ public partial class WinoOperationFlyoutItem : MenuFlyoutIte Operation = operationMenuItem; IsEnabled = operationMenuItem.IsEnabled; + MenuFlyoutLanguageHelper.Apply(this); + if (Operation is FolderOperationMenuItem folderOperationMenuItem) { var internalOperation = folderOperationMenuItem.Operation; diff --git a/Wino.Mail.WinUI/Views/Calendar/EventDetailsPage.xaml b/Wino.Mail.WinUI/Views/Calendar/EventDetailsPage.xaml index 0a8a6c6e..a09b16ad 100644 --- a/Wino.Mail.WinUI/Views/Calendar/EventDetailsPage.xaml +++ b/Wino.Mail.WinUI/Views/Calendar/EventDetailsPage.xaml @@ -535,7 +535,7 @@ - + - + diff --git a/Wino.Mail.WinUI/Views/Mail/ComposePage.xaml b/Wino.Mail.WinUI/Views/Mail/ComposePage.xaml index b2ca018e..f52cbe1d 100644 --- a/Wino.Mail.WinUI/Views/Mail/ComposePage.xaml +++ b/Wino.Mail.WinUI/Views/Mail/ComposePage.xaml @@ -35,7 +35,7 @@ Background="Transparent" ColumnSpacing="3"> - + - + diff --git a/Wino.Mail.WinUI/Views/Mail/MailListPage.xaml.cs b/Wino.Mail.WinUI/Views/Mail/MailListPage.xaml.cs index 7430e328..960e4ef1 100644 --- a/Wino.Mail.WinUI/Views/Mail/MailListPage.xaml.cs +++ b/Wino.Mail.WinUI/Views/Mail/MailListPage.xaml.cs @@ -27,6 +27,7 @@ using Wino.Core.Domain.Models.Navigation; using Wino.Mail.ViewModels.Data; using Wino.Mail.ViewModels.Messages; using Wino.Mail.WinUI; +using Wino.Mail.WinUI.Controls; using Wino.Mail.WinUI.Controls.ListView; using Wino.Mail.WinUI.Helpers; using Wino.Mail.WinUI.Interfaces; @@ -318,7 +319,7 @@ public sealed partial class MailListPage : MailListPageAbstract, double y) { var source = new TaskCompletionSource(); - var flyout = new MenuFlyout(); + var flyout = new WinoMenuFlyout(); foreach (var action in availableActions) { diff --git a/Wino.Mail.WinUI/Views/Mail/MailRenderingPage.xaml b/Wino.Mail.WinUI/Views/Mail/MailRenderingPage.xaml index b0834a78..4f6cdccb 100644 --- a/Wino.Mail.WinUI/Views/Mail/MailRenderingPage.xaml +++ b/Wino.Mail.WinUI/Views/Mail/MailRenderingPage.xaml @@ -80,7 +80,7 @@ - + - + diff --git a/Wino.Mail.WinUI/Views/ProviderSelectionPage.xaml b/Wino.Mail.WinUI/Views/ProviderSelectionPage.xaml index bbeb1125..be1b19fd 100644 --- a/Wino.Mail.WinUI/Views/ProviderSelectionPage.xaml +++ b/Wino.Mail.WinUI/Views/ProviderSelectionPage.xaml @@ -80,7 +80,12 @@ BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="8"> - + + + + + + - - - - - - - + - + + + - - + + - + diff --git a/Wino.Mail.WinUI/Views/Settings/PersonalizationPage.xaml b/Wino.Mail.WinUI/Views/Settings/PersonalizationPage.xaml index fd7d1a77..acfec935 100644 --- a/Wino.Mail.WinUI/Views/Settings/PersonalizationPage.xaml +++ b/Wino.Mail.WinUI/Views/Settings/PersonalizationPage.xaml @@ -5,6 +5,7 @@ xmlns:abstract="using:Wino.Views.Abstract" xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:controls1="using:Wino.Controls" + xmlns:coreControls="using:Wino.Mail.WinUI.Controls" xmlns:coreSelectors="using:Wino.Mail.WinUI.Selectors" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:data="using:Wino.Core.ViewModels.Data" @@ -56,7 +57,7 @@ CornerRadius="6" RowSpacing="0"> - + - + diff --git a/Wino.Mail.WinUI/Views/WinoAppShell.xaml.cs b/Wino.Mail.WinUI/Views/WinoAppShell.xaml.cs index 5811a79f..8dcdc40a 100644 --- a/Wino.Mail.WinUI/Views/WinoAppShell.xaml.cs +++ b/Wino.Mail.WinUI/Views/WinoAppShell.xaml.cs @@ -534,7 +534,7 @@ public sealed partial class WinoAppShell : Views.Abstract.WinoAppShellAbstract, args.Handled = true; - var flyout = new MenuFlyout(); + var flyout = new WinoMenuFlyout(); var manageAccountSettingsItem = new MenuFlyoutItem {