private void MyToolWindow_Loaded(object sender, RoutedEventArgs e) { if (_loaded) return; TreeView1.Background = grid1.Background = VsThemes.GetToolWindowBackground(); var overflowGrid = explorerToolbar.Template.FindName("OverflowGrid", explorerToolbar) as FrameworkElement; if (overflowGrid != null) { overflowGrid.Visibility = Visibility.Collapsed; } Updated.Visibility = Visibility.Collapsed; // Look for update async var bw = new BackgroundWorker(); bw.DoWork += bw_DoWork; bw.RunWorkerCompleted += (s, ea) => { try { PrepareTreeView("Data Connections"); Refresh.IsEnabled = true; if ((bool)ea.Result) { Updated.Visibility = Visibility.Visible; _myStoryboard.Begin(this); } else { Updated.Visibility = Visibility.Collapsed; } } finally { bw.Dispose(); } }; // Animate updated button var myDoubleAnimation = new DoubleAnimation { From = 0.1, To = 1.0, Duration = new Duration(TimeSpan.FromSeconds(5)), AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever }; _myStoryboard = new Storyboard(); _myStoryboard.Children.Add(myDoubleAnimation); Storyboard.SetTargetName(myDoubleAnimation, UpdatedText.Name); Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(OpacityProperty)); PrepareTreeView("Loading..."); bw.RunWorkerAsync(); AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent); txtConnections.Focus(); _loaded = true; }