Skip to content

Commit 1caf9e3

Browse files
committed
Fix CirclePanel and HoneycombPanel when contains collapsed element
1 parent 78d6673 commit 1caf9e3

2 files changed

Lines changed: 22 additions & 13 deletions

File tree

dev/DevWinUI/Controls/Native/Panel/CirclePanel.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ protected override Size MeasureOverride(Size availableSize)
3232
{
3333
var diameter = Diameter;
3434

35-
if (Children.Count == 0) return new Size(diameter, diameter);
35+
var layoutChildren = Children.OfType<UIElement>().Where(element => element.Visibility != Visibility.Collapsed).ToList();
36+
37+
if (layoutChildren.Count == 0) return new Size(diameter, diameter);
3638

3739
var newSize = new Size(diameter, diameter);
3840

39-
foreach (UIElement element in Children)
41+
foreach (var element in layoutChildren)
4042
{
4143
element.Measure(newSize);
4244
}
@@ -49,11 +51,18 @@ protected override Size ArrangeOverride(Size finalSize)
4951
var keepVertical = KeepVertical;
5052
var offsetAngle = OffsetAngle;
5153

54+
var layoutChildren = Children.OfType<UIElement>().Where(element => element.Visibility != Visibility.Collapsed).ToList();
55+
56+
if (layoutChildren.Count == 0)
57+
{
58+
return finalSize;
59+
}
60+
5261
var i = 0;
53-
var perDeg = 360.0 / Children.Count;
62+
var perDeg = 360.0 / layoutChildren.Count;
5463
var radius = Diameter / 2;
5564

56-
foreach (UIElement element in Children)
65+
foreach (var element in layoutChildren)
5766
{
5867
var centerX = element.DesiredSize.Width / 2.0;
5968
var centerY = element.DesiredSize.Height / 2.0;

dev/DevWinUI/Controls/Native/Panel/HoneycombPanel.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,19 @@ protected override Size MeasureOverride(Size availableSize)
5656
{
5757
var maxSize = new Size();
5858

59-
foreach (UIElement child in Children)
59+
var layoutChildren = Children.Cast<UIElement>().Where(child => child != null && child.Visibility != Visibility.Collapsed).ToList();
60+
61+
foreach (var child in layoutChildren)
6062
{
61-
if (child != null)
62-
{
63-
child.Measure(availableSize);
64-
maxSize.Width = Math.Max(maxSize.Width, child.DesiredSize.Width);
65-
maxSize.Height = Math.Max(maxSize.Height, child.DesiredSize.Height);
66-
}
63+
child.Measure(availableSize);
64+
maxSize.Width = Math.Max(maxSize.Width, child.DesiredSize.Width);
65+
maxSize.Height = Math.Max(maxSize.Height, child.DesiredSize.Height);
6766
}
6867

6968
_unitLength = Math.Max(maxSize.Width, maxSize.Height) / 2;
7069

71-
var xCount = GetXCount(Children.Count);
72-
var yCount = GetYCount(Children.Count);
70+
var xCount = GetXCount(layoutChildren.Count);
71+
var yCount = GetYCount(layoutChildren.Count);
7372

7473
var availableWidth = xCount * _unitLength;
7574
var availableHeight = yCount * Math.Pow(3, 0.5) * _unitLength + _unitLength * 2;
@@ -85,6 +84,7 @@ protected override Size ArrangeOverride(Size finalSize)
8584

8685
foreach (UIElement child in Children)
8786
{
87+
if (child == null || child.Visibility == Visibility.Collapsed) continue;
8888
child.Arrange(_stuffer.Move());
8989
}
9090

0 commit comments

Comments
 (0)