Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit c0deb99

Browse files
author
Oscar Vaquero
committed
Fix the wrong assignation of margins when the text is assigned
Remove margins when the badge is not shown
1 parent a3b08e8 commit c0deb99

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ static async void OnTextChanged(BindableObject bindable, object oldValue, object
119119
{
120120
badgeView.UpdateLayout();
121121
await badgeView.UpdateVisibilityAsync();
122+
badgeView.UpdateBadgeViewPlacement(true);
122123
}
123124
}
124125

@@ -261,45 +262,58 @@ void UpdateBadgeViewPlacement(bool force = false)
261262
if (placementDone)
262263
return;
263264

264-
const double Padding = 6;
265+
var containerMargin = new Thickness(0);
266+
var contentMargin = new Thickness(0);
265267

266-
var size = Math.Max(BadgeText.Height, BadgeText.Width) + Padding;
268+
if (BadgeIndicatorContainer.IsVisible)
269+
{
270+
const double Padding = 6;
271+
var size = Math.Max(BadgeText.Height, BadgeText.Width) + Padding;
272+
BadgeIndicatorBackground.HeightRequest = size;
273+
var margins = GetMargins(size);
274+
containerMargin = margins.Item1;
275+
contentMargin = margins.Item2;
276+
}
267277

268-
BadgeIndicatorBackground.HeightRequest = size / 1.5;
278+
BadgeIndicatorContainer.Margin = containerMargin;
279+
BadgeContent.Margin = contentMargin;
280+
placementDone = true;
281+
}
269282

283+
Tuple<Thickness, Thickness> GetMargins(double size)
284+
{
270285
double verticalMargin;
271286
double horizontalMargin;
272-
287+
var containerMargin = new Thickness(0);
288+
var contentMargin = new Thickness(0);
273289
switch (BadgePosition)
274290
{
275-
case BadgePosition.TopLeft:
276-
verticalMargin = size / 2;
277-
horizontalMargin = BadgeContent.Width + verticalMargin;
278-
BadgeIndicatorContainer.Margin = new Thickness(0, 0, horizontalMargin, 0);
279-
BadgeContent.Margin = new Thickness(verticalMargin, verticalMargin, 0, 0);
280-
break;
281291
case BadgePosition.TopRight:
282292
verticalMargin = size / 2;
283293
horizontalMargin = BadgeContent.Width - verticalMargin;
284-
BadgeIndicatorContainer.Margin = new Thickness(horizontalMargin, 0, 0, 0);
285-
BadgeContent.Margin = new Thickness(0, verticalMargin, 0, 0);
294+
containerMargin = new Thickness(horizontalMargin, 0, 0, 0);
295+
contentMargin = new Thickness(0, verticalMargin, verticalMargin, 0);
286296
break;
287-
case BadgePosition.BottomLeft:
297+
case BadgePosition.TopLeft:
298+
verticalMargin = size / 2;
299+
containerMargin = new Thickness(0, 0, 0, 0);
300+
contentMargin = new Thickness(verticalMargin, verticalMargin, 0, 0);
301+
break;
302+
case BadgePosition.BottomRight:
288303
verticalMargin = size / 2;
289304
var bottomLeftverticalMargin = BadgeContent.Height - verticalMargin;
290-
BadgeIndicatorContainer.Margin = new Thickness(0, bottomLeftverticalMargin, 0, 0);
305+
containerMargin = new Thickness(0, bottomLeftverticalMargin, 0, 0);
291306
BadgeContent.Margin = new Thickness(verticalMargin, 0, 0, 0);
292307
break;
293-
case BadgePosition.BottomRight:
308+
case BadgePosition.BottomLeft:
294309
verticalMargin = size / 2;
295310
var bottomRightverticalMargin = BadgeContent.Height - verticalMargin;
296311
horizontalMargin = BadgeContent.Width - verticalMargin;
297-
BadgeIndicatorContainer.Margin = new Thickness(horizontalMargin, bottomRightverticalMargin, 0, 0);
298-
BadgeContent.Margin = new Thickness(0, 0, 0, verticalMargin);
312+
containerMargin = new Thickness(horizontalMargin, bottomRightverticalMargin, 0, 0);
313+
contentMargin = new Thickness(0, 0, verticalMargin, 0);
299314
break;
300315
}
301-
302-
placementDone = true;
316+
return new Tuple<Thickness, Thickness>(containerMargin, contentMargin);
303317
}
304318

305319
async Task UpdateVisibilityAsync()
@@ -316,6 +330,7 @@ async Task UpdateVisibilityAsync()
316330
}
317331

318332
var badgeIsVisible = !AutoHide || !badgeText.Trim().Equals("0");
333+
BadgeIndicatorContainer.IsVisible = badgeIsVisible;
319334

320335
if (IsAnimated)
321336
{
@@ -335,8 +350,6 @@ async Task UpdateVisibilityAsync()
335350

336351
isVisible = badgeIsVisible;
337352
}
338-
else
339-
BadgeIndicatorContainer.IsVisible = badgeIsVisible;
340353
}
341354
}
342355
}

0 commit comments

Comments
 (0)