Пример #1
0
        /// <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();
            }
        }