@@ -119,6 +119,7 @@ static async void OnTextChanged(BindableObject bindable, object oldValue, object
119
119
{
120
120
badgeView . UpdateLayout ( ) ;
121
121
await badgeView . UpdateVisibilityAsync ( ) ;
122
+ badgeView . UpdateBadgeViewPlacement ( true ) ;
122
123
}
123
124
}
124
125
@@ -261,45 +262,58 @@ void UpdateBadgeViewPlacement(bool force = false)
261
262
if ( placementDone )
262
263
return ;
263
264
264
- const double Padding = 6 ;
265
+ var containerMargin = new Thickness ( 0 ) ;
266
+ var contentMargin = new Thickness ( 0 ) ;
265
267
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
+ }
267
277
268
- BadgeIndicatorBackground . HeightRequest = size / 1.5 ;
278
+ BadgeIndicatorContainer . Margin = containerMargin ;
279
+ BadgeContent . Margin = contentMargin ;
280
+ placementDone = true ;
281
+ }
269
282
283
+ Tuple < Thickness , Thickness > GetMargins ( double size )
284
+ {
270
285
double verticalMargin ;
271
286
double horizontalMargin ;
272
-
287
+ var containerMargin = new Thickness ( 0 ) ;
288
+ var contentMargin = new Thickness ( 0 ) ;
273
289
switch ( BadgePosition )
274
290
{
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 ;
281
291
case BadgePosition . TopRight :
282
292
verticalMargin = size / 2 ;
283
293
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 ) ;
286
296
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 :
288
303
verticalMargin = size / 2 ;
289
304
var bottomLeftverticalMargin = BadgeContent . Height - verticalMargin ;
290
- BadgeIndicatorContainer . Margin = new Thickness ( 0 , bottomLeftverticalMargin , 0 , 0 ) ;
305
+ containerMargin = new Thickness ( 0 , bottomLeftverticalMargin , 0 , 0 ) ;
291
306
BadgeContent . Margin = new Thickness ( verticalMargin , 0 , 0 , 0 ) ;
292
307
break ;
293
- case BadgePosition . BottomRight :
308
+ case BadgePosition . BottomLeft :
294
309
verticalMargin = size / 2 ;
295
310
var bottomRightverticalMargin = BadgeContent . Height - verticalMargin ;
296
311
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 ) ;
299
314
break ;
300
315
}
301
-
302
- placementDone = true ;
316
+ return new Tuple < Thickness , Thickness > ( containerMargin , contentMargin ) ;
303
317
}
304
318
305
319
async Task UpdateVisibilityAsync ( )
@@ -316,6 +330,7 @@ async Task UpdateVisibilityAsync()
316
330
}
317
331
318
332
var badgeIsVisible = ! AutoHide || ! badgeText . Trim ( ) . Equals ( "0" ) ;
333
+ BadgeIndicatorContainer . IsVisible = badgeIsVisible ;
319
334
320
335
if ( IsAnimated )
321
336
{
@@ -335,8 +350,6 @@ async Task UpdateVisibilityAsync()
335
350
336
351
isVisible = badgeIsVisible ;
337
352
}
338
- else
339
- BadgeIndicatorContainer . IsVisible = badgeIsVisible ;
340
353
}
341
354
}
342
355
}
0 commit comments