Skip to content

Commit 5720452

Browse files
Merge pull request #200 from syncfusion/AccordionGlobalStyle
960628 - Application crashes when setting ItemSpacing and ExpandMode using Global Styling
2 parents 4f045ae + c6f5cb8 commit 5720452

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed

maui/src/Accordion/AccordionItem.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,6 @@ static void OnIsExpandedPropertyChanged(BindableObject bindable, object oldValue
462462
// Content does not get collapsed when item is being collapsed in PCL view.
463463
if (bindable is AccordionItem accordionItem)
464464
{
465-
if (accordionItem.Content != null && (bool)newValue && accordionItem.Content.IsVisible)
466-
{
467-
accordionItem.Content.IsVisible = true;
468-
}
469-
470465
if (accordionItem._accordion != null && accordionItem._accordionItemView != null && accordionItem._accordionItemView.IsExpanded != accordionItem.IsExpanded)
471466
{
472467
accordionItem.OnIsExpandedChanging((bool)newValue);

maui/src/Accordion/SfAccordion.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ internal override Size LayoutMeasure(double widthConstraint, double heightConstr
13921392
/// <param name="newValue">The new value of expand mode property. </param>
13931393
static void OnExpandModePropertyChanged(BindableObject bindable, object oldValue, object newValue)
13941394
{
1395-
if (bindable is SfAccordion accordion)
1395+
if (bindable is SfAccordion accordion && accordion.IsViewLoaded)
13961396
{
13971397
accordion.UpdateAccordionItemsBasedOnExpandModes(true);
13981398
}
@@ -1406,7 +1406,7 @@ static void OnExpandModePropertyChanged(BindableObject bindable, object oldValue
14061406
/// <param name="newValue">The new value of item spacing property. </param>
14071407
static void OnItemSpacingPropertyChanged(BindableObject bindable, object oldValue, object newValue)
14081408
{
1409-
if (bindable is SfAccordion accordion)
1409+
if (bindable is SfAccordion accordion && accordion.IsViewLoaded)
14101410
{
14111411
foreach (var item in accordion.Items)
14121412
{
@@ -1427,7 +1427,7 @@ static void OnItemSpacingPropertyChanged(BindableObject bindable, object oldValu
14271427
/// <param name="newValue">The new value of animation duration property. </param>
14281428
static void OnAnimationDurationPropertyChanged(BindableObject bindable, object oldValue, object newValue)
14291429
{
1430-
if (bindable is SfAccordion accordion)
1430+
if (bindable is SfAccordion accordion && accordion.IsViewLoaded)
14311431
{
14321432
foreach (AccordionItem item in accordion.Items)
14331433
{
@@ -1447,7 +1447,7 @@ static void OnAnimationDurationPropertyChanged(BindableObject bindable, object o
14471447
/// <param name="newValue">The new value of animation easing property. </param>
14481448
static void OnAnimationEasingPropertyChanged(BindableObject bindable, object oldValue, object newValue)
14491449
{
1450-
if (bindable is SfAccordion accordion)
1450+
if (bindable is SfAccordion accordion && accordion.IsViewLoaded)
14511451
{
14521452
foreach (AccordionItem item in accordion.Items)
14531453
{
@@ -1467,7 +1467,7 @@ static void OnAnimationEasingPropertyChanged(BindableObject bindable, object old
14671467
/// <param name="newValue">The new value of header icon position property. </param>
14681468
static void OnHeaderIconPositionPropertyChanged(BindableObject bindable, object oldValue, object newValue)
14691469
{
1470-
if (bindable is SfAccordion accordion)
1470+
if (bindable is SfAccordion accordion && accordion.IsViewLoaded)
14711471
{
14721472
foreach (AccordionItem item in accordion.Items)
14731473
{

maui/tests/Syncfusion.Maui.Toolkit.UnitTest/Layout/SfAccordionUnitTests.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,68 @@ public void ItemsProperty_SetItems_TriggersOnItemsPropertyChanged()
523523
Assert.Equal(2, itemsFromProperty.Count);
524524
}
525525

526+
[Fact]
527+
public void AccordionStyle_WhenApplied_SetsCorrectProperties()
528+
{
529+
// Arrange
530+
var animationDuration = 100;
531+
ExpanderAnimationEasing easing = new ExpanderAnimationEasing();
532+
easing = ExpanderAnimationEasing.SinInOut;
533+
ExpanderIconPosition expanderIconPosition = new ExpanderIconPosition();
534+
expanderIconPosition = ExpanderIconPosition.Start;
535+
var itemSpacing = 100;
536+
AccordionExpandMode expandMode = new AccordionExpandMode();
537+
expandMode = AccordionExpandMode.Multiple;
538+
AccordionAutoScrollPosition autoScrollPosition = new AccordionAutoScrollPosition();
539+
autoScrollPosition = AccordionAutoScrollPosition.MakeVisible;
540+
var style = new Style(typeof(SfAccordion));
541+
style.Setters.Add(new Setter
542+
{
543+
Property = SfAccordion.AnimationDurationProperty,
544+
Value = animationDuration
545+
});
546+
style.Setters.Add(new Setter
547+
{
548+
Property = SfAccordion.HeaderIconPositionProperty,
549+
Value = expanderIconPosition
550+
});
551+
style.Setters.Add(new Setter
552+
{
553+
Property = SfAccordion.AnimationEasingProperty,
554+
Value = easing
555+
});
556+
style.Setters.Add(new Setter
557+
{
558+
Property = SfAccordion.ExpandModeProperty,
559+
Value = expandMode
560+
});
561+
style.Setters.Add(new Setter
562+
{
563+
Property = SfAccordion.ItemSpacingProperty,
564+
Value = itemSpacing
565+
});
566+
style.Setters.Add(new Setter
567+
{
568+
Property = SfAccordion.AutoScrollPositionProperty,
569+
Value = autoScrollPosition
570+
});
571+
var resources = new ResourceDictionary();
572+
resources.Add("AccordionStyle", style);
573+
Application.Current = new Application();
574+
Application.Current.Resources = resources;
575+
var accordion = new SfAccordion();
576+
// Act
577+
accordion.Style = (Style)Application.Current.Resources["AccordionStyle"];
578+
// Assert
579+
Assert.Equal(animationDuration, accordion.AnimationDuration);
580+
Assert.Equal(expanderIconPosition, accordion.HeaderIconPosition);
581+
Assert.Equal(easing, accordion.AnimationEasing);
582+
Assert.Equal(expandMode, accordion.ExpandMode);
583+
Assert.Equal(animationDuration, accordion.AnimationDuration);
584+
Assert.Equal(itemSpacing, accordion.ItemSpacing);
585+
Assert.Equal(autoScrollPosition, accordion.AutoScrollPosition);
586+
}
587+
526588
#endregion
527589

528590
#region Methods
@@ -1044,6 +1106,7 @@ public void OnHeaderIconPositionPropertyChanged_UpdatesIconPosition()
10441106
var accordionItem = new AccordionItem();
10451107
accordion.Items.Add(accordionItem);
10461108
accordionItem._accordionItemView = [];
1109+
accordion.IsViewLoaded = true;
10471110
accordion.HeaderIconPosition = ExpanderIconPosition.Start;
10481111
var oldValue = ExpanderIconPosition.End;
10491112
var newValue = ExpanderIconPosition.Start;
@@ -1070,6 +1133,7 @@ public void OnAnimationEasingPropertyChanged_UpdatesAnimationEasing(ExpanderAnim
10701133
var accordionItem = new AccordionItem();
10711134
accordion.Items.Add(accordionItem);
10721135
accordionItem._accordionItemView = [];
1136+
accordion.IsViewLoaded = true;
10731137
accordion.AnimationEasing = newValue;
10741138
MethodInfo? methodInfo = typeof(SfAccordion).GetMethod(
10751139
"OnAnimationEasingPropertyChanged",
@@ -1093,6 +1157,7 @@ public void OnAnimationDurationPropertyChanged_UpdatesAnimationDuration(int newV
10931157
var accordionItem = new AccordionItem();
10941158
accordion.Items.Add(accordionItem);
10951159
accordionItem._accordionItemView = [];
1160+
accordion.IsViewLoaded = true;
10961161
accordion.AnimationDuration = newValue;
10971162
MethodInfo? methodInfo = typeof(SfAccordion).GetMethod(
10981163
"OnAnimationDurationPropertyChanged",

0 commit comments

Comments
 (0)