/// <summary> /// 成るか不成りかダイアログによる選択を行います。 /// </summary> private bool CheckToPromote(PieceType pieceType, BWType bwType) { var dialog = DialogUtil.CreateDialog( null, "成りますか?", "成り/不成り", MessageBoxButton.YesNo, MessageBoxResult.Yes); dialog.Topmost = true; dialog.Loaded += (sender, e) => { var p = WPFUtil.GetMousePosition(dialog); var screenPos = dialog.PointToScreen(p); dialog.WindowStartupLocation = WindowStartupLocation.Manual; dialog.Left = screenPos.X - (dialog.ActualWidth / 2); dialog.Top = screenPos.Y + CellSize.Height / 2; dialog.AdjustInDisplay(); }; try { ClosePromoteDialog(); // 成り・不成り選択中に外から局面が設定されることがあります。 // その場合に備えてダイアログ自体を持っておきます。 this.promoteDialog = dialog; var result = dialog.ShowDialog(); ClosePromoteDialog(); return(result != null ? result.Value : false); } finally { ClosePromoteDialog(); } }