[英]Disable Main Window WPF
我正在WPF應用程序上工作,我在主窗口中運行掃描功能。 掃描部分在單獨的線程中運行。 掃描終止后,它將另一個窗口顯示為模式彈出窗口。
現在,我真正想要的是在掃描完成后彈出彈出窗口時禁用主窗口。 因此,用戶只有在關閉彈出窗口后才能在主窗口上單擊。 但是我做不到。
謝謝
將父窗口設置為子窗口(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);
在關閉子窗口之前,它不會讓您單擊父窗口。
我相信閱讀MSDN上的“ 對話框概述”頁面將消除您的困惑。 從鏈接頁面:
當功能需要用戶提供其他數據以繼續時,該功能將顯示一個模式對話框。 因為該功能依賴於模式對話框來收集數據,所以模式對話框還阻止用戶在應用程序保持打開狀態的同時激活其他窗口。 在大多數情況下,模態對話框允許用戶通過按“確定”或“取消”按鈕來完成模態對話框的信號。 按下“確定”按鈕表示用戶已輸入數據,並希望功能繼續使用該數據進行處理。 按下取消按鈕表示用戶希望完全停止執行該功能。 模態對話框的最常見示例顯示為打開,保存和打印數據。
請閱讀鏈接頁面上的“ 創建模態定制對話框”部分,以了解如何創建自己的定制模態對話框Window
。
更新>>>
一個非常簡單的替代方法是添加一個元素,該元素將覆蓋頁面上的所有其他元素:
<Grid>
<!-- Your content here -->
<Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Fill="#3FFFFFFF" Visibility="{Binding IsOverlayVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
當然,您需要使用IValueConverter
來控制顯示bool
屬性( IsOverlayVisible
)的IValueConverter
以控制其顯示時間。
嘗試使用當前的Dispatcher
對象調用ShowDialog
。
在其他線程中執行的代碼中使用以下代碼塊。
Application.Current.Dispatcher.Invoke(new Action(() =>
{
//Show your dialog here.
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.