diff --git a/src/Avalonia.Controls/SplitView/SplitView.cs b/src/Avalonia.Controls/SplitView/SplitView.cs index fed0367d12..fd6fd98de6 100644 --- a/src/Avalonia.Controls/SplitView/SplitView.cs +++ b/src/Avalonia.Controls/SplitView/SplitView.cs @@ -297,6 +297,7 @@ namespace Avalonia.Controls _pane = e.NameScope.Find("PART_PaneRoot"); UpdateVisualStateForDisplayMode(DisplayMode); + UpdatePaneStatePseudoClass(IsPaneOpen); } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) @@ -331,19 +332,13 @@ namespace Avalonia.Controls else if (change.Property == IsPaneOpenProperty) { bool isPaneOpen = change.GetNewValue(); - + UpdatePaneStatePseudoClass(isPaneOpen); if (isPaneOpen) { - PseudoClasses.Add(pcOpen); - PseudoClasses.Remove(pcClosed); - OnPaneOpened(new RoutedEventArgs(PaneOpenedEvent, this)); } else { - PseudoClasses.Add(pcClosed); - PseudoClasses.Remove(pcOpen); - OnPaneClosed(new RoutedEventArgs(PaneClosedEvent, this)); } } @@ -579,6 +574,20 @@ namespace Avalonia.Controls e.Handled = true; } + private void UpdatePaneStatePseudoClass(bool isPaneOpen) + { + if (isPaneOpen) + { + PseudoClasses.Add(pcOpen); + PseudoClasses.Remove(pcClosed); + } + else + { + PseudoClasses.Add(pcClosed); + PseudoClasses.Remove(pcOpen); + } + } + /// /// Coerces/validates the property value. /// diff --git a/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs b/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs index 9b43c469ba..47383fa9ad 100644 --- a/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs @@ -1,5 +1,7 @@ -using Avalonia.Input; +using Avalonia.Animation; +using Avalonia.Input; using Avalonia.UnitTests; +using Moq; using Xunit; namespace Avalonia.Controls.UnitTests @@ -65,7 +67,8 @@ namespace Avalonia.Controls.UnitTests [Fact] public void SplitView_TemplateSettings_Are_Correct_For_Display_Modes() { - using var app = UnitTestApplication.Start(TestServices.StyledWindow); + using var app = UnitTestApplication.Start(TestServices.StyledWindow + .With(globalClock: new MockGlobalClock())); var wnd = new Window { Width = 1280, @@ -280,5 +283,25 @@ namespace Avalonia.Controls.UnitTests Assert.True(splitView.IsPaneOpen); } + + [Fact] + public void With_Default_IsPaneOpen_Value_Should_Have_Closed_Pseudo_Class_Set() + { + // Testing this control Pseudo Classes requires placing the SplitView on a window + // prior to asserting them, because some of the pseudo classes are set either when + // the template is applied or the control is attached to the visual tree + using var app = UnitTestApplication.Start(TestServices.StyledWindow + .With(globalClock: new MockGlobalClock())); + var wnd = new Window + { + Width = 1280, + Height = 720 + }; + var splitView = new SplitView(); + wnd.Content = splitView; + wnd.Show(); + + Assert.Contains(splitView.Classes, ":closed".Equals); + } } }