protected override void OnStartup(object sender, StartupEventArgs e) { var settingsBuilder = new WindowSettingsBuilder() .AsTopmost() .SizeToContent(); // Can't use SystemParameters.WorkArea as that defines only the primary monitor, virtual screen defines the multi-monitor work area var virtualTopLeft = new Point(SystemParameters.VirtualScreenLeft, SystemParameters.VirtualScreenTop); var virtualSize = new Size(SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight); var virtualRect = new Rect(virtualTopLeft, virtualSize); // Guard against the existing window position being outside the screen, if it is just center the app to teh screen if ((Settings.Default.Top == 0 && Settings.Default.Left == 0) || !virtualRect.Contains(new Point(Settings.Default.Left, Settings.Default.Top))) { settingsBuilder.WithStartupLocation(WindowStartupLocation.CenterScreen); } else { settingsBuilder.WithTopLeft(Settings.Default.Top, Settings.Default.Left); } var settings = settingsBuilder.Create(); DisplayRootViewFor<ShellViewModel>(settings); }
public void ShowExpCardCalculator(ContentControl sender) { if (ExpCardCalculatorViewModel.IsActive) return; var senderPosition = sender.PointToScreen(new Point()); // allows us to position the new window below the button we just clicked var settings = new WindowSettingsBuilder() .SizeToContent() .WithTopLeft(senderPosition.Y + sender.ActualHeight, senderPosition.X) .HideMaximizeButton() .HideMinimizeButton() .HideIcon() .Create(); windowManager.ShowWindow(ExpCardCalculatorViewModel, null, settings); }