2015-05-14 6 views
-1

Я работаю над приложением WPF, где я запускаю сканирование в главном окне, а часть сканирования работает в потоке. После завершения сканирования он отображает другое окно в виде модального всплывающего окна.Отключить основное окно WPF

Теперь я точно хочу отключить главное окно, когда всплывающее окно выходит после завершения сканирования, чтобы пользователь не мог щелкнуть по главному окну, пока он не закрыл всплывающее окно. Но это не удалось сделать.

Благодаря

+0

Является ли всплывающее окно? Можете ли вы показать соответствующий код? Если это окно, не можете ли вы называть его ShowDialog? –

+0

"это показывает другое окно как модальное всплывающее окно« Как вы можете получить доступ к главному окну, когда показывается какое-то другое модальное окно? –

+0

Я использую ShowDialog, но не работает. if (! Licensed.ValidateLicenseKey (ScanAreas.LicenseKey) && scanStatus == "complete") { ModalPopup popup = new ModalPopup(); popup.Activate(); popup.Topmost = true; popup.ShowDialog(); } это код – Nonit

ответ

0

Я считаю, что чтение Dialog Boxes Overview страницу на MSDN прояснится ваше замешательство. На связанной странице:

Модальное диалоговое окно отображается функцией, когда функции требуют дополнительных данных от пользователя для продолжения. Поскольку функция зависит от модального диалогового окна для сбора данных, модальное диалоговое окно также запрещает пользователю активировать другие окна в приложении, пока оно остается открытым. В большинстве случаев модальное диалоговое окно позволяет пользователю сигнализировать, когда они закончили с модальным диалоговым окном, нажав кнопку «ОК» или «Отмена». Нажатие кнопки «ОК» означает, что пользователь ввел данные и хочет, чтобы функция продолжала обрабатывать эти данные. Нажатие кнопки «Отмена» означает, что пользователь хочет полностью прекратить выполнение функции. Отображаются наиболее распространенные примеры модальных диалоговых окон для открытия, сохранения и печати данных.

Пожалуйста, прочтите Создание модального диалогового окна пользовательского раздел связанной страницы, чтобы узнать, как создать свой собственный модальный диалог Window.


UPDATE >>>

Очень простая альтернатива, чтобы добавить элемент, который будет накладывать все остальные элементы на странице:

<Grid> 
    <!-- Your content here --> 
    <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
     Fill="#3FFFFFFF" Visibility="{Binding IsOverlayVisible, 
     Converter={StaticResource BooleanToVisibilityConverter}}"/> 
</Grid> 

Конечно, вам нужно данных связать объект bool (IsOverlayVisible) с помощью IValueConverter для управления, когда он отображается.

+0

На самом деле это не модальное всплывающее окно с другим окном wpf. Я просто назвал это окно как ModalWindow. Эта вещь работает нормально, если я открою другое окно и покажу его как ShowDialog. Но проблема возникает, когда она открывается после завершения сканирования, потому что метод сканирования написан под другим потоком, чем основной поток пользовательского интерфейса. – Nonit

+0

По вашему описанию 'пользователь не может нажать на главное окно, пока не закроет всплывающее окно, это модальное диалоговое окно. ShowDialog делает именно это. – Liero

+0

Да, эта штука работает нормально, но только тогда, когда мы открываем это окно вне секции потока. Когда такое окно используется в другом потоке, в это время основное окно активируется, а showdialog работает неправильно. – Nonit

0

Попробуйте использовать текущий Dispatcher объект для звонка ShowDialog.

используйте следующий блок в коде, который вы выполняете в какой-либо другой теме.

Application.Current.Dispatcher.Invoke(new Action(() => 
{ 
    //Show your dialog here. 

})); 
2

Набор родительского окна в качестве владельца для дочернего окна (Popup) и открыть окно ребенка, как Showdialog(), как показано ниже:

Создать «NavigationService.cs» класс и поместить следующий код в этом классе.

public void ShowPopUpWindow(PopUpWindowViewModel popUpWindowViewModel) 
     { 
      PopUpWindowView= new PopUpWindowView(); 
      PopUpWindowView.DataContext = popUpWindowViewModel; 
      PopUpWindowView.Owner = ParentWindowView; 
      PopUpWindowView.ShowDialog(); 
     } 

Теперь, вызовите выше метод в ViewModel класса, как показано ниже:

PopUpWindowViewModel popUpWindowViewModel = new PopUpWindowViewModel(); 
PopUpWindowViewModel.Name = "This is Popup Window"; 
NavigationService navigationService = new NavigationService(); 
navigationService.ShowPopUpWindow(PopUpWindowViewModel); 

Это не позволит вам нажать на родительском окне, пока не закроется окно ребенка.

Смежные вопросы