From 8cfa8a2f72257523cdcdfa92240b9446d3fc7cc3 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 6 Jul 2022 16:42:52 -0400 Subject: [PATCH] Merge pull request #8456 from AvaloniaUI/fixes/splitview-culture-sensitive make splitview not culture sensitive. # Conflicts: # src/Avalonia.Controls/SplitView.cs --- src/Avalonia.Controls/SplitView.cs | 66 ++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/src/Avalonia.Controls/SplitView.cs b/src/Avalonia.Controls/SplitView.cs index 0bb776da6f..6855eca40b 100644 --- a/src/Avalonia.Controls/SplitView.cs +++ b/src/Avalonia.Controls/SplitView.cs @@ -431,32 +431,62 @@ namespace Avalonia.Controls } } + private string GetPseudoClass(SplitViewDisplayMode mode) + { + return mode switch + { + SplitViewDisplayMode.Inline => "inline", + SplitViewDisplayMode.CompactInline => "compactinline", + SplitViewDisplayMode.Overlay => "overlay", + SplitViewDisplayMode.CompactOverlay => "compactoverlay", + _ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null) + }; + } + + private string GetPseudoClass(SplitViewPanePlacement placement) + { + return placement switch + { + SplitViewPanePlacement.Left => "left", + SplitViewPanePlacement.Right => "right", + _ => throw new ArgumentOutOfRangeException(nameof(placement), placement, null) + }; + } + private void OnPanePlacementChanged(AvaloniaPropertyChangedEventArgs e) { - var oldState = e.OldValue.ToString().ToLower(); - var newState = e.NewValue.ToString().ToLower(); - PseudoClasses.Remove($":{oldState}"); - PseudoClasses.Add($":{newState}"); + if (e.OldValue is SplitViewPanePlacement oldValue && e.NewValue is SplitViewPanePlacement newValue) + { + var oldState = GetPseudoClass(oldValue); + var newState = GetPseudoClass(newValue); + PseudoClasses.Remove($":{oldState}"); + PseudoClasses.Add($":{newState}"); + } } private void OnDisplayModeChanged(AvaloniaPropertyChangedEventArgs e) { - var oldState = e.OldValue.ToString().ToLower(); - var newState = e.NewValue.ToString().ToLower(); + if (e.OldValue is SplitViewDisplayMode oldValue && e.NewValue is SplitViewDisplayMode newValue) + { + var oldState = GetPseudoClass(oldValue); + var newState = GetPseudoClass(newValue); - PseudoClasses.Remove($":{oldState}"); - PseudoClasses.Add($":{newState}"); + PseudoClasses.Remove($":{oldState}"); + PseudoClasses.Add($":{newState}"); - var (closedPaneWidth, paneColumnGridLength) = (SplitViewDisplayMode)e.NewValue switch - { - SplitViewDisplayMode.Overlay => (0, new GridLength(0, GridUnitType.Pixel)), - SplitViewDisplayMode.CompactOverlay => (CompactPaneLength, new GridLength(CompactPaneLength, GridUnitType.Pixel)), - SplitViewDisplayMode.Inline => (0, new GridLength(0, GridUnitType.Auto)), - SplitViewDisplayMode.CompactInline => (CompactPaneLength, new GridLength(0, GridUnitType.Auto)), - _ => throw new NotImplementedException(), - }; - TemplateSettings.ClosedPaneWidth = closedPaneWidth; - TemplateSettings.PaneColumnGridLength = paneColumnGridLength; + + var (closedPaneWidth, paneColumnGridLength) = newValue switch + { + SplitViewDisplayMode.Overlay => (0, new GridLength(0, GridUnitType.Pixel)), + SplitViewDisplayMode.CompactOverlay => (CompactPaneLength, + new GridLength(CompactPaneLength, GridUnitType.Pixel)), + SplitViewDisplayMode.Inline => (0, new GridLength(0, GridUnitType.Auto)), + SplitViewDisplayMode.CompactInline => (CompactPaneLength, new GridLength(0, GridUnitType.Auto)), + _ => throw new NotImplementedException(), + }; + TemplateSettings.ClosedPaneWidth = closedPaneWidth; + TemplateSettings.PaneColumnGridLength = paneColumnGridLength; + } } private void OnUseLightDismissChanged(AvaloniaPropertyChangedEventArgs e)