private void RefreshView() { double size = Math.Min(ActualHeight - Grid.RowDefinitions[0].ActualHeight - Padding.Bottom - Padding.Top, ActualWidth - Padding.Left - Padding.Right); if (size < 0) { return; } Canvas.Width = size; Canvas.Height = size; Canvas.InvalidateVisual(); BackgroundPiece.Radius = size / 2; BackgroundPiece.InnerRadius = BackgroundPiece.Radius * RingWidthFactor; BackgroundPiece.InvalidateVisual(); Canvas.SetLeft(BackgroundPiece, size / 2); Canvas.SetTop(BackgroundPiece, size / 2); foreach (PiePiece item in PieList) { item.Radius = size / 2; item.InnerRadius = item.Radius * RingWidthFactor; item.InvalidateVisual(); Canvas.SetLeft(item, size / 2); Canvas.SetTop(item, size / 2); } RefreshValueText(); }