Chinese language treatment for WinUI bug.

This commit is contained in:
Burak Kaan Köse
2026-04-18 01:39:25 +02:00
parent 9e735c911c
commit 3caecc5a9c
16 changed files with 93 additions and 59 deletions
@@ -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;
}
@@ -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<IPreferencesService>().CurrentLanguage == AppLanguage.Chinese)
{
item.Language = ChineseLanguageTag;
}
else
{
item.ClearValue(MenuFlyoutItemBase.LanguageProperty);
}
}
}
@@ -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);
}
}
}
}
@@ -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<MailAccount> _accounts;
private readonly Func<MailAccount, Task> _onItemSelection;
@@ -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<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
public static readonly DependencyProperty FilterOptionsProperty = DependencyProperty.Register(nameof(FilterOptions), typeof(List<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
@@ -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<MailOperationMenuItem>
{
public MailOperationFlyout(IEnumerable<MailOperationMenuItem> availableActions, TaskCompletionSource<MailOperationMenuItem> 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);
}
}
}
}
@@ -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<MoveButtonFlyout, MoveButtonMenuItemClickedEventArgs> MenuItemClick = delegate { };
public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List<MailItemFolder>), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged)));
@@ -30,8 +31,6 @@ public partial class MoveButtonFlyout : MenuFlyout
{
menu.InitializeMenu();
}
}
private void InitializeMenu()
@@ -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<TActionType> : MenuFlyout, IDisposable where TActionType : class
public partial class WinoOperationFlyout<TActionType> : WinoMenuFlyout, IDisposable where TActionType : class
{
public TActionType ClickedOperation { get; set; } = null!;
@@ -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<TOperationMenuItem> : MenuFlyoutIte
Operation = operationMenuItem;
IsEnabled = operationMenuItem.IsEnabled;
MenuFlyoutLanguageHelper.Apply(this);
if (Operation is FolderOperationMenuItem folderOperationMenuItem)
{
var internalOperation = folderOperationMenuItem.Operation;
@@ -535,7 +535,7 @@
<ToolTip Content="{x:Bind FileName}" />
</ToolTipService.ToolTip>
<Grid.ContextFlyout>
<MenuFlyout Placement="Right">
<coreControls:WinoMenuFlyout Placement="Right">
<MenuFlyoutItem
Click="OpenCalendarAttachment_Click"
CommandParameter="{x:Bind}"
@@ -552,7 +552,7 @@
<PathIcon Data="{StaticResource SaveAttachmentPathIcon}" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>
</coreControls:WinoMenuFlyout>
</Grid.ContextFlyout>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
+2 -2
View File
@@ -35,7 +35,7 @@
Background="Transparent"
ColumnSpacing="3">
<Grid.ContextFlyout>
<MenuFlyout>
<coreControls:WinoMenuFlyout>
<MenuFlyoutItem
Click="OpenAttachment_Click"
CommandParameter="{x:Bind}"
@@ -44,7 +44,7 @@
Click="SaveAttachment_Click"
CommandParameter="{x:Bind}"
Text="{x:Bind domain:Translator.Buttons_Save}" />
</MenuFlyout>
</coreControls:WinoMenuFlyout>
</Grid.ContextFlyout>
<ToolTipService.ToolTip>
<ToolTip Content="{x:Bind FileName}" />
@@ -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<MailContextAction?>();
var flyout = new MenuFlyout();
var flyout = new WinoMenuFlyout();
foreach (var action in availableActions)
{
@@ -80,7 +80,7 @@
<ToolTip Content="{x:Bind FileName}" />
</ToolTipService.ToolTip>
<Grid.ContextFlyout>
<MenuFlyout Placement="Right">
<coreControls:WinoMenuFlyout Placement="Right">
<MenuFlyoutItem
Click="OpenAttachment_Click"
CommandParameter="{x:Bind}"
@@ -97,7 +97,7 @@
<PathIcon Data="{StaticResource SaveAttachmentPathIcon}" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>
</coreControls:WinoMenuFlyout>
</Grid.ContextFlyout>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
@@ -80,7 +80,12 @@
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="8">
<StackPanel Spacing="10">
<Grid RowSpacing="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Spacing="2">
<TextBlock FontWeight="SemiBold" Text="{x:Bind domain:Translator.AccountCreation_InitialSynchronization_Title}" />
<TextBlock
@@ -90,31 +95,29 @@
TextWrapping="WrapWholeWords" />
</StackPanel>
<ListView
<GridView
Grid.Row="1"
HorizontalAlignment="Center"
HorizontalContentAlignment="Stretch"
ItemsSource="{x:Bind ViewModel.InitialSynchronizationRanges, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedInitialSynchronizationRange, Mode=TwoWay}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<GridView.ItemTemplate>
<DataTemplate x:DataType="accounts:InitialSynchronizationRangeOption">
<TextBlock Text="{x:Bind DisplayText}" />
<Grid Padding="12">
<TextBlock Text="{x:Bind DisplayText}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</GridView.ItemTemplate>
</GridView>
<muxc:InfoBar
Title="{x:Bind domain:Translator.GeneralTitle_Warning}"
Grid.Row="2"
Margin="0,2,0,0"
IsOpen="True"
Message="{x:Bind domain:Translator.AccountCreation_InitialSynchronization_EverythingWarning}"
Severity="Warning"
Visibility="{x:Bind ViewModel.IsInitialSynchronizationWarningVisible, Mode=OneWay}" />
</StackPanel>
</Grid>
</Border>
<!-- Provider List -->
@@ -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">
<Grid.ContextFlyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<coreControls:WinoMenuFlyout Placement="BottomEdgeAlignedRight">
<MenuFlyoutItem
Command="{Binding ElementName=root, Path=ViewModel.DeleteCustomThemeCommand}"
CommandParameter="{x:Bind}"
@@ -65,7 +66,7 @@
<SymbolIcon Symbol="Delete" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>
</coreControls:WinoMenuFlyout>
</Grid.ContextFlyout>
<Grid.RowDefinitions>
<RowDefinition Height="125" />
+1 -1
View File
@@ -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
{