Пример #1
0
        /// <summary>
        /// Возвращает текущее окно верхнего уровня, от которого следует строить
        /// появляющиеся окна диалога.
        /// </summary>
        private Window GetCurrentTopOwnerWindow()
        {
            Window владелец = null;

            try
            {
                Func <Window> задействуйОснПоток = delegate { return(Application.Current.MainWindow); };
                владелец = (Window)WindowServices.InvokeOnUIThread(задействуйОснПоток);
            }
            catch (InvalidOperationException)
            {
                return(null);
            }
            if (стекОконДиалога.Count > 0)
            {
                владелец = стекОконДиалога[стекОконДиалога.Count - 1];
            }
            return(владелец);
        }
Пример #2
0
        private MessageBoxResult ShowMessageBox(Window окноВладелец, string сообщение, string заголовок, MessageBoxButton кнопка, MessageBoxImage иконка)
        // СТ 09.11.2016
        {
            Func <MessageBoxResult> задействуйОснПоток = delegate {
                MessageBoxResult результатДиалога;

                if (окноВладелец != null)
                {
                    результатДиалога = MessageBox.Show(окноВладелец, сообщение, заголовок, кнопка, иконка);
                }
                else
                {
                    результатДиалога = MessageBox.Show(сообщение, заголовок, кнопка, иконка);
                }

                return(результатДиалога);
            };

            return((MessageBoxResult)WindowServices.InvokeOnUIThread(задействуйОснПоток));
        }
Пример #3
0
        /// <summary>
        /// Показать окно в режиме диалога.
        /// </summary>
        public bool?ПоказатьОкноДиалога(Window window, object dataContext)
        {
            Window owner = GetCurrentTopOwnerWindow();

            // помещаем в стек окно которое сейчас будет отображено
            if (owner != null)
            {
                this.стекОконДиалога.Add(window);
            }

            // выполнение диалога
            try {
                Func <bool?> func = delegate { return(ShowDialogWithContext(window, dataContext, owner)); };
                return((bool?)WindowServices.InvokeOnUIThread(func));
            } finally {
                // всегда убираем из стека отработанное окно
                if (owner != null)
                {
                    this.стекОконДиалога.Remove(window);
                }
            }
        }