private void UpdateWin2DCanvas() { if (unloaded) { return; } if (ItemsPanelRoot is GooeyButtonItemsPanel panel) { if (this.panel == null) { this.panel = panel; } if (Win2DCanvas == null) { Win2DCanvas = new CanvasAnimatedControl(); Win2DHost.Children.Add(Win2DCanvas); Win2DCanvas.IsHitTestVisible = false; Win2DCanvas.CreateResources += OnWin2DCreateResources; Win2DCanvas.Draw += OnWin2DDraw; } var radius = panel.Children.Count == 0 ? 0 : panel.Children.Max(c => c.RenderSize.IsEmpty ? 0 : Math.Max(c.RenderSize.Width, c.RenderSize.Height)); var size = (Distance + radius * 4) * 2; Win2DCanvas.Width = size; Win2DCanvas.Height = size; property.CenterPoint = new Vector2((float)size / 2); Canvas.SetLeft(Win2DCanvas, -size / 2); Canvas.SetTop(Win2DCanvas, -size / 2); } }
private void OnUnloaded(object sender, RoutedEventArgs e) { unloaded = true; Win2DCanvas.Draw -= OnWin2DDraw; Win2DCanvas.Paused = true; panel = null; Win2DCanvas.RemoveFromVisualTree(); Win2DHost.Children.Remove(Win2DCanvas); Win2DCanvas = null; }
private void OnLoaded(object sender, RoutedEventArgs e) { if (ItemsPanelRoot is GooeyButtonItemsPanel panel) { if (this.panel == null) { this.panel = panel; } panel.Distance = Distance; panel.Expanded = Expanded; panel.ItemsPosition = ItemsPosition; panel.ItemsAnimationStarted += OnItemsAnimationStarted; panel.ItemsAnimationCompleted += OnItemsAnimationCompleted; panel.Unloaded += OnItemsPanelUnloaded; } UpdateStoryboards(); UpdateProperty(); ResetItemsProperty(); UpdateWin2DCanvas(); }