public override bool CanExecute(object parameter) { IAppController controller = ServiceRegistration.Get <IAppController>(false); Window mainWindow = Application.Current.MainWindow; if (mainWindow == null) { return(false); } Visibility visibility = mainWindow.Visibility; switch ((string)parameter) { case "DoubleClick": // DoubleClick of TrayIcon return(true); case "Open": // Open Main Window return(visibility != Visibility.Visible); case "Hide": // Close Main Window return(visibility == Visibility.Visible); case "Quit": // Quit Main Application return(true); case "Minimize": // Minimize to Tray return(visibility == Visibility.Visible); case "StartService": // Start the MP2-Server as Service return((controller != null) && (controller.IsServerServiceInstalled()) && (!controller.IsServerServiceRunning())); case "StopService": // Stop the MP2-Server Service return((controller != null) && (controller.IsServerServiceInstalled()) && (controller.IsServerServiceRunning())); case "EnableAutoStart": return((controller != null) && (!controller.IsAutoStartEnabled)); case "DisableAutoStart": return((controller != null) && (controller.IsAutoStartEnabled)); default: var msg = String.Format("ApplicationCommand fired with missing or invalid parameter: {0}", parameter); throw new InvalidOperationException(msg); } }